import { generateObject } from "ai";
import { z } from "zod";
import { resolveModel, type AiConfig } from "../factory";

const SubstitutionsSchema = z.object({
  substitutions: z.array(z.object({
    name: z.string(),
    ratio: z.string(),
    note: z.string(),
    flavorImpact: z.enum(["minimal", "moderate", "significant"]),
  })),
});

export type Substitution = z.infer<typeof SubstitutionsSchema>["substitutions"][number];

const LANG: Record<string, string> = { en: "English", fr: "French" };

export async function substituteIngredient(
  ingredient: string,
  recipeContext: string,
  config?: AiConfig,
  locale?: string
): Promise<Substitution[]> {
  const model = resolveModel(config);
  const lang = LANG[locale ?? "en"] ?? "English";

  const { object } = await generateObject({
    model,
    schema: SubstitutionsSchema,
    system:
      `You are a professional chef specializing in ingredient substitutions. Provide practical, commonly available substitutes. For each substitute: name what to use, the ratio (e.g. '1:1', '3/4 the amount'), and a brief note on technique adjustments. Rate the flavor impact honestly. Respond in ${lang}.`,
    prompt: `Suggest 3-4 substitutes for "${ingredient}" in this recipe context: ${recipeContext}`,
  });

  return object.substitutions;
}
