import { z } from "zod";

/**
 * Zod-Schema für die Wehr-Bereitstellung (Admin-Workstream): legt Brigade +
 * ersten wehr_admin an. ASCII-Property `wehrfuehrer`. E-Mail wird auf
 * Kleinbuchstaben normalisiert.
 */
export const brigadeProvisionSchema = z.object({
  name: z.string().trim().min(1, { message: "Wehr-Name ist Pflicht." }),
  strasse: z.string().trim().min(1, { message: "Straße ist Pflicht." }),
  plz: z.string().trim().min(1, { message: "PLZ ist Pflicht." }),
  ort: z.string().trim().min(1, { message: "Ort ist Pflicht." }),
  telefon: z.string().trim().min(1, { message: "Telefon ist Pflicht." }),
  email: z
    .string()
    .trim()
    .email({ message: "Ungültige E-Mail." })
    .optional()
    .or(z.literal("").transform(() => undefined)),
  wehrfuehrer: z
    .string()
    .trim()
    .optional()
    .transform((v) => (v === "" ? undefined : v)),
  adminEmail: z
    .string()
    .trim()
    .email({ message: "Ungültige Admin-E-Mail." })
    .transform((v) => v.toLowerCase()),
  adminName: z.string().trim().min(1, { message: "Admin-Name ist Pflicht." }),
});

export type BrigadeProvisionInput = z.infer<typeof brigadeProvisionSchema>;

/** Schema für Passwort-Reset eines (lokalen) Wehr-Benutzers. */
export const userResetSchema = z.object({
  userId: z.string().uuid({ message: "Ungültige ID." }),
});

export type UserResetInput = z.infer<typeof userResetSchema>;

/**
 * Schema für die Profil-Bearbeitung durch den Wehr-Admin der EIGENEN Wehr
 * (Workstream 7). Kein `name`/keine Anlage — nur Stamm-/Kontaktdaten. Die
 * `brigadeId` kommt IMMER serverseitig aus der Session, nie aus dem Input.
 */
export const brigadeProfileSchema = z.object({
  strasse: z.string().trim().min(1, { message: "Straße ist Pflicht." }),
  plz: z.string().trim().min(1, { message: "PLZ ist Pflicht." }),
  ort: z.string().trim().min(1, { message: "Ort ist Pflicht." }),
  telefon: z
    .string()
    .trim()
    .optional()
    .transform((v) => (v === "" ? undefined : v)),
  email: z
    .string()
    .trim()
    .email({ message: "Ungültige E-Mail." })
    .optional()
    .or(z.literal("").transform(() => undefined)),
  wehrfuehrer: z
    .string()
    .trim()
    .optional()
    .transform((v) => (v === "" ? undefined : v)),
  funkrufnameSchema: z
    .string()
    .trim()
    .optional()
    .transform((v) => (v === "" ? undefined : v)),
});

export type BrigadeProfileInput = z.infer<typeof brigadeProfileSchema>;
