import 'formatter.dart';

class Validators {
  static final RegExp _emailRegExp = RegExp(
    r'^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$',
  );
  static final RegExp _passwordRegExp = RegExp(
    r'^.{4,8}$',
  );

  static isValidEmail(String email) {
    return _emailRegExp.hasMatch(email);
  }

  static isValidPassword(String password) {
    return _passwordRegExp.hasMatch(password);
  }

  static isValidName(String name) {
    return name.isNotEmpty;
  }

  static String validateNotNullOrEmpty(String value, String errorMessage) {
    if (value.length == 0) {
      return errorMessage;
    } else {
      return '';
    }
  }

  static String? validNumberOrEmpty(String value, String errorMessage) {
    if (value.isEmpty) return null;
    try {
      var doubleValue = value.parseDoubleThousand();
      if (doubleValue > 0) {
        return null;
      } else {
        return errorMessage;
      }
    } catch (_) {
      return errorMessage;
    }
  }

  static bool stringNotNullOrEmpty(String value) {
    if (value == null) {
      return false;
    } else if (value.trim().isEmpty) {
      return false;
    } else {
      return true;
    }
  }

  static String? validateEmail(String value) {
    var pattern =
        r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
    var regExp = RegExp(pattern);
    if (value.length == 0) {
      return "Nhập email";
    } else if (!regExp.hasMatch(value)) {
      return "Email không đúng";
    } else {
      return null;
    }
  }

  String? validateNewPassword(String value) {
    if (value.length == 0) {
      return "Nhập mật khẩu mới";
    } else {
      return null;
    }
  }

  String? validateConfirmPassword(String newPassword, String value) {
    if (value.length == 0) {
      return "Nhập lại mật khẩu mới";
    } else if (newPassword != value) {
      return "Mật khẩu không trùng khớp";
    } else {
      return null;
    }
  }
}

final validators = Validators();
