import * as yup from 'yup';
import { es } from 'yup-locales';

yup.setLocale(es);

/**
 * Esquema de validación para la creación de usuarios.
 * 
 * @constant {yup.ObjectSchema} schema
 */
const createUsuarioValidations = yup.object().shape({
  /**
   * Validación del nombre del usuario.
   * Debe ser una cadena, sin espacios al inicio o final, con al menos 3 caracteres.
   */
  nombre: yup.string()
    .required('El nombre es obligatorio.')
    .min(3, 'El nombre debe tener al menos 3 caracteres.'),

  /**
   * Validación del correo electrónico del usuario.
   * Debe ser una cadena válida en formato de correo electrónico.
   */
  email: yup.string()
    .lowercase()
    .required('El correo electrónico es obligatorio.')
    .email('Debe ser un correo electrónico válido.'),

  /**
   * Validación de la contraseña del usuario.
   * Debe tener al menos 8 caracteres, incluir una letra mayúscula y un número.
   */
  password: yup.string()
    .required('La contraseña es obligatoria.')
    .min(8, 'La contraseña debe tener al menos 8 caracteres.')
    .matches(/(?=.*[A-Z])/, 'La contraseña debe contener al menos una letra mayúscula.')
    .matches(/(?=.*\d)/, 'La contraseña debe contener al menos un número.')
    .matches(/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+/, 'La contraseña debe contener al menos un caracter especial.'),

  /**
   * Validación del rol del usuario.
   * Debe ser "administrador" o "usuario".
   */
  rol: yup.string()
    .oneOf(['administrador', 'usuario'], 'El rol debe ser administrador o usuario.')
    .default('usuario'),

  /**
   * Validación de la URL de la foto de perfil.
   * Puede ser nula o una URL válida.
   */
  fotoPerfil: yup.string('La URL de la foto de perfil no es válida.')
    .nullable()
});



export { createUsuarioValidations }