import { z } from "zod"

/* ═══════════════════════════════
   Ingredient CRUD
   ═══════════════════════════════ */

export const createIngredientSchema = z.object({
    name: z.string().min(1, "Le nom est requis"),
    allergen: z.boolean().optional().default(false),
    extraPrice: z.number().int().min(0).optional().default(0),
    imageUrl: z.string().nullable().optional(),
})

export const updateIngredientSchema = createIngredientSchema.partial().extend({
    active: z.boolean().optional(),
})

export type CreateIngredientInput = z.infer<typeof createIngredientSchema>
export type UpdateIngredientInput = z.infer<typeof updateIngredientSchema>

/* ═══════════════════════════════
   Recipe ingredient item (role-based)
   ═══════════════════════════════ */

export const recipeIngredientItemSchema = z.object({
    ingredientId: z.string().uuid(),
    role: z.enum(["BASE", "DEFAULT", "SUPPLEMENT"]).default("DEFAULT"),
    defaultQuantity: z.number().int().min(1).optional().default(1),
    maxQuantity: z.number().int().min(1).nullable().optional().default(null),
    extraPrice: z.number().int().min(0).optional().default(0),
})

export const setRecipeSchema = z.object({
    ingredients: z.array(recipeIngredientItemSchema),
})

export type SetRecipeInput = z.infer<typeof setRecipeSchema>

/* ═══════════════════════════════
   Order item customization
   ═══════════════════════════════ */

export const orderItemCustomizationSchema = z.object({
    ingredientId: z.string().uuid(),
    action: z.enum(["ADDED", "REMOVED"]),
    quantity: z.number().int().min(1).optional().default(1),
})

export type OrderItemCustomizationInput = z.infer<typeof orderItemCustomizationSchema>
