// Libs
// -----------------------------------------------------------------------------
import { RuleObject } from 'antd/lib/form';

// Минимальная длина пароля
const MIN_PASSWORD_LENGTH = 8;

// Список регулярок, которым должен соответствовать хороший пароль
const PASSWORD_REQUIREMENTS_REGEXPS: Array<RegExp> = [
  // Цифры
  /[0-9]/,
  // Строчные латинские буквы
  /[a-z]/,
  // Прописные латинские буквы
  /[A-Z]/,
];

/**
 * Проверить значение формы с паролем.
 */
export const validatePassword = (
  rule: RuleObject,
  value: string,
): Promise<void> => {
  // Не пытаться валидировать пустые строки.
  // Нужно для сценариев, когда пароль не поменялся.
  if (!value) {
    return Promise.resolve();
  }

  // Проверить длину пароля
  if (value.length < MIN_PASSWORD_LENGTH) {
    return Promise.reject();
  }

  // Проверить пароль на соответствие требованиям
  for (const re of PASSWORD_REQUIREMENTS_REGEXPS) {
    if (value.match(re) === null) {
      return Promise.reject();
    }
  }

  return Promise.resolve();
};
