import { z } from "zod";
import { uuidSchema } from "./common";

/**
 * Zod-Schemas für Fahrzeug-Vorlagen, ihre (typisierten) Vorgabe-Merkmale und
 * Aliasse (Admin-Workstream). Vorgabewerte als drei getrennte typisierte Felder
 * `vorgabewertNum/_Text/_Bool` (DB-WS-Entscheidung).
 */

export const templateCreateSchema = z.object({
  code: z.string().trim().min(1, { message: "Code ist Pflicht." }),
  name: z.string().trim().min(1, { message: "Name ist Pflicht." }),
  beschreibung: z
    .string()
    .trim()
    .optional()
    .transform((v) => (v === "" ? undefined : v)),
});

export const templateUpdateSchema = templateCreateSchema.extend({
  id: uuidSchema,
});

export const templateMerkmalSchema = z.object({
  merkmalId: uuidSchema,
  vorgabewertNum: z.number().nullable().optional(),
  vorgabewertText: z
    .string()
    .trim()
    .optional()
    .transform((v) => (v === "" ? undefined : v)),
  vorgabewertBool: z.boolean().nullable().optional(),
  pflicht: z.boolean().optional().default(false),
  reihenfolge: z.coerce.number().int().min(0).optional().default(0),
});

export const aliasSchema = z.object({
  templateId: uuidSchema,
  alias: z.string().trim().min(1, { message: "Alias ist Pflicht." }),
  bestaetigt: z.boolean().optional().default(false),
});

export type TemplateCreateInput = z.infer<typeof templateCreateSchema>;
export type TemplateUpdateInput = z.infer<typeof templateUpdateSchema>;
export type TemplateMerkmalInput = z.infer<typeof templateMerkmalSchema>;
export type AliasInput = z.infer<typeof aliasSchema>;
