class MihValidationServices {
  String? isEmpty(String? value) {
    if (value == null || value.isEmpty) {
      return "This field is required";
    }
    return null;
  }

  String? validateLength(String? value, int maxLength) {
    if (value == null || value.isEmpty) {
      return "This field is required";
    }
    if (value.length > maxLength) {
      return "Length must not exceed $maxLength characters";
    }
    return null;
  }

  String? validateWebsite(String? website, bool required) {
    final websiteRegex = RegExp(
        r'^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$');
    if (!required && website!.isEmpty) {
      return null;
    }
    if (!websiteRegex.hasMatch(website!)) {
      return "Invalid Website Format";
    }
    return null;
  }

  String? validateEmail(String? email) {
    if (email == null || email.isEmpty) {
      return "Email is required";
    }
    final emailRegex =
        RegExp(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');
    if (!emailRegex.hasMatch(email)) {
      return "Invalid Email Format";
    }
    return null;
  }

  String? validateUsername(String? username) {
    String? errorMessage = "";
    if (username == null || username.isEmpty) {
      errorMessage += "Username is required";
      return errorMessage;
    }
    if (!RegExp(r'^[a-zA-Z]').hasMatch(username)) {
      errorMessage += "\n• Your username should start with a letter.";
    }
    if (!RegExp(r'^[a-zA-Z0-9_]+$').hasMatch(username)) {
      errorMessage +=
          "\n• You can use letters, numbers, and/or underscores only.";
    }
    if (username.length < 6 || username.length > 30) {
      errorMessage += "\n• Keep it between 6 and 30 characters.";
    }
    if (RegExp(r'[@#\$]').hasMatch(username)) {
      errorMessage += "\n• Avoid special characters like @, #, or \$.";
    }

    if (errorMessage.isEmpty) {
      return null; // No errors, username is valid
    }
    return "Let's create a great username for you!$errorMessage";
  }

  String? validateNumber(String? number, int? minValue, int? maxValue) {
    String? errorMessage = "";
    if (number == null || number.isEmpty) {
      errorMessage += "This field is required";
      return errorMessage;
    }
    int? value = int.tryParse(number);
    if (value == null) {
      errorMessage += "Please enter a valid number";
      return errorMessage;
    }
    if (value < (minValue ?? 0)) {
      errorMessage += "Value must be >= ${minValue ?? 0}";
    }
    if (maxValue != null && value > maxValue) {
      if (errorMessage.isNotEmpty) errorMessage += "\n";
      errorMessage += "Value must be <= $maxValue";
    }
    return errorMessage.isEmpty ? null : errorMessage;
  }

  String? validatePassword(String? password) {
    String? errorMessage = "";
    if (password == null || password.isEmpty) {
      errorMessage += "Password is required";
      return errorMessage;
    }
    if (password.length < 8) {
      errorMessage += "\n• Contains at least 8 characters long";
    }
    if (!RegExp(r'[A-Z]').hasMatch(password)) {
      errorMessage += "\n• Contains at least 1 uppercase letter";
    }
    if (!RegExp(r'[a-z]').hasMatch(password)) {
      errorMessage += "\n• Contains at least 1 lowercase letter";
    }
    if (!RegExp(r'[0-9]').hasMatch(password)) {
      errorMessage += "\n• Contains at least 1 digit";
    }
    if (!RegExp(r'[!@#$%^&*]').hasMatch(password)) {
      errorMessage += "\n• Contains at least 1 special character (!@#\$%^&*)";
    }
    if (errorMessage.isEmpty) {
      return null; // No errors, password is valid
    }
    errorMessage = "Let's create a great password for you!$errorMessage";
    return errorMessage;
  }
}
