/** Правила пароля — как в админке и setup wizard. Логин без ограничений по символам. */
export const DEFAULT_PASSWORD_MIN_LEN = 8;
export const LOGIN_MAX_LEN = 64;
export const PASSWORD_COMPLEXITY_MSG =
  "Пароль не должен состоять только из цифр или только из букв. Смешайте буквы и цифры.";

export function validateNewUserCredentials({
  login,
  password,
  confirmPassword,
  passwordMinLen = DEFAULT_PASSWORD_MIN_LEN,
  label = "",
}) {
  const prefix = label ? `${label}: ` : "";
  const trimmedLogin = String(login || "").trim();
  if (!trimmedLogin) return `${prefix}укажите логин.`;
  if (trimmedLogin.length > LOGIN_MAX_LEN) {
    return `${prefix}логин не длиннее ${LOGIN_MAX_LEN} символов.`;
  }
  if (!password) return `${prefix}укажите пароль.`;
  if (password !== confirmPassword) return `${prefix}пароли не совпадают.`;
  if (password.length < passwordMinLen) {
    return `${prefix}пароль не короче ${passwordMinLen} символов.`;
  }
  if (/^\d+$/.test(password) || /^[a-zA-Z]+$/.test(password)) {
    return `${prefix}${PASSWORD_COMPLEXITY_MSG}`;
  }
  return null;
}

export function validateCredentialChange({
  oldLogin,
  oldPassword,
  newLogin,
  newPassword,
  confirmPassword,
  passwordMinLen = DEFAULT_PASSWORD_MIN_LEN,
}) {
  if (!oldLogin || !oldPassword) {
    return "Укажите текущий логин и пароль";
  }
  return validateNewUserCredentials({
    login: newLogin,
    password: newPassword,
    confirmPassword,
    passwordMinLen,
  });
}

export function ensureCredentialsFormHints() {}

if (typeof globalThis !== "undefined") {
  globalThis.WespUserCredentials = {
    DEFAULT_PASSWORD_MIN_LEN,
    LOGIN_MAX_LEN,
    PASSWORD_COMPLEXITY_MSG,
    validateCredentialChange,
    validateNewUserCredentials,
    ensureCredentialsFormHints,
  };
}
