import { z } from "zod";

// Wiederverwendbare Passwort-Regel: min. 10 Zeichen, Groß-/Kleinbuchstabe + Ziffer.
export const passwordSchema = z
  .string()
  .min(10, "Mindestens 10 Zeichen")
  .max(128, "Höchstens 128 Zeichen")
  .regex(/[a-z]/, "Mindestens ein Kleinbuchstabe")
  .regex(/[A-Z]/, "Mindestens ein Großbuchstabe")
  .regex(/[0-9]/, "Mindestens eine Ziffer");

export const emailSchema = z
  .email("Ungültige E-Mail-Adresse")
  .max(190)
  .transform((v) => v.trim().toLowerCase());

export const loginSchema = z.object({
  email: emailSchema,
  password: z.string().min(1, "Passwort erforderlich").max(128),
});

export const changePasswordSchema = z
  .object({
    currentPassword: z.string().min(1, "Aktuelles Passwort erforderlich"),
    newPassword: passwordSchema,
    confirmPassword: z.string(),
  })
  .refine((d) => d.newPassword === d.confirmPassword, {
    message: "Passwörter stimmen nicht überein",
    path: ["confirmPassword"],
  });

export const requestResetSchema = z.object({
  email: emailSchema,
});

export const confirmResetSchema = z
  .object({
    token: z.string().min(10),
    newPassword: passwordSchema,
    confirmPassword: z.string(),
  })
  .refine((d) => d.newPassword === d.confirmPassword, {
    message: "Passwörter stimmen nicht überein",
    path: ["confirmPassword"],
  });

export type LoginInput = z.infer<typeof loginSchema>;
export type ChangePasswordInput = z.infer<typeof changePasswordSchema>;
export type RequestResetInput = z.infer<typeof requestResetSchema>;
export type ConfirmResetInput = z.infer<typeof confirmResetSchema>;
