import { z } from "zod";
import { assetStatusEnum } from "@/db/schema";
import { uuidSchema, optionalText } from "./common";

/**
 * Zod-Schemas für Geräte/Beladung (Workstream 7). `vehicleId = undefined`
 * bedeutet „im Gerätehaus" (DB-Spalte NULL). Die Zuordnung darf serverseitig
 * nur auf ein Fahrzeug DERSELBEN Wehr zeigen (Scope-Prüfung in der Action).
 * `status` über das DB-Enum `asset_status` (Single Source of Truth).
 */

export const assetStatusSchema = z.enum(assetStatusEnum.enumValues);

const optionalUuid = z
  .string()
  .trim()
  .optional()
  .transform((v) => (v === undefined || v === "" ? undefined : v))
  .refine((v) => v === undefined || uuidSchema.safeParse(v).success, {
    message: "Ungültige ID.",
  });

export const equipmentBaseSchema = z.object({
  name: z.string().trim().min(1, { message: "Gerätename ist Pflicht." }),
  categoryId: uuidSchema,
  vehicleId: optionalUuid,
  notiz: optionalText,
});

export type EquipmentBaseInput = z.infer<typeof equipmentBaseSchema>;

export const equipmentCreateSchema = equipmentBaseSchema;
export const equipmentUpdateSchema = z.object({
  id: uuidSchema,
  ...equipmentBaseSchema.shape,
});
export type EquipmentUpdateInput = z.infer<typeof equipmentUpdateSchema>;

export const equipmentStatusSchema = z.object({
  id: uuidSchema,
  status: assetStatusSchema,
});
export type EquipmentStatusInput = z.infer<typeof equipmentStatusSchema>;

export const equipmentIdSchema = z.object({ id: uuidSchema });
