import { z } from 'zod';
import { PASSWORD_MIN_LENGTH, PASSWORD_MAX_LENGTH } from '@effigenix/config';

/**
 * Reusable field validators
 */

export const emailSchema = z
  .string()
  .min(1, 'E-Mail ist erforderlich')
  .email('Ungültige E-Mail-Adresse')
  .max(254, 'E-Mail-Adresse zu lang');

export const passwordSchema = z
  .string()
  .min(PASSWORD_MIN_LENGTH, `Passwort muss mindestens ${String(PASSWORD_MIN_LENGTH)} Zeichen lang sein`)
  .max(PASSWORD_MAX_LENGTH, `Passwort darf maximal ${String(PASSWORD_MAX_LENGTH)} Zeichen lang sein`)
  .refine((val) => /[A-Z]/.test(val), 'Passwort muss mindestens einen Großbuchstaben enthalten')
  .refine((val) => /[a-z]/.test(val), 'Passwort muss mindestens einen Kleinbuchstaben enthalten')
  .refine((val) => /[0-9]/.test(val), 'Passwort muss mindestens eine Ziffer enthalten');

export const usernameSchema = z
  .string()
  .min(3, 'Benutzername muss mindestens 3 Zeichen lang sein')
  .max(50, 'Benutzername darf maximal 50 Zeichen lang sein')
  .regex(/^[a-zA-Z0-9_.-]+$/, 'Benutzername darf nur Buchstaben, Ziffern, _, . und - enthalten');

export const uuidSchema = z.string().uuid('Ungültige UUID');
