import { z } from "zod";
import { MEAL_TYPES, RECIPE_TAGS } from "@app/shared-types";

/**
 * "Vad ska vi äta?" (spec §18) + "Jag är sugen på" (spec §19).
 * Alla parametrar är valfria – motorn använder hushållets kontext som standard.
 */
export const whatToEatQuerySchema = z.object({
  mealType: z.enum(MEAL_TYPES).default("dinner"),
  /** Filtrera kandidater på en recept-tagg (t.ex. "baking" för Baka-fliken)
   * i stället för måltidstyp. mealType används fortfarande för poängsättning. */
  tag: z.enum(RECIPE_TAGS).optional(),
  persons: z.coerce.number().int().min(1).max(20).optional(),
  maxMinutes: z.coerce.number().int().min(5).max(600).optional(),
  maxCostMinorPerPortion: z.coerce.number().int().min(0).max(100_000).optional(),
  /** Fritext eller röst-transkription: "krämigt", "asiatiskt", "under 500 kcal" … */
  craving: z.string().max(300).optional(),
  /** Titel-/beskrivningssök: filtrerar kandidaterna på namn (t.ex. "pannkaka"). */
  search: z.string().max(120).optional(),
  /** Filtrera på en högtid/säsong (recept-holidayTag-slug, t.ex. "jul"). */
  holiday: z.string().max(60).optional(),
  includeLeftovers: z.coerce.boolean().default(true),
  limit: z.coerce.number().int().min(1).max(50).default(5),
  /** Personaliseringsvy: smak, hälsa eller lager. Kräver personalization-samtycke. */
  view: z.enum(["default", "taste", "health", "pantry", "swap"]).default("default"),
});
export type WhatToEatQuery = z.infer<typeof whatToEatQuerySchema>;
