import { NextResponse } from "next/server";
import { z } from "zod";
import {
  buildIntentFromText,
  buildIntentFromTextWithOpenAI,
  getWorkClarificationPrompt,
  intentContextSchema
} from "@/lib/intent";

const requestSchema = z.object({
  text: z.string().min(1, "Le texte est requis."),
  mode: z.enum(["event", "work"]).optional(),
  context: intentContextSchema.optional()
});

export async function POST(request: Request) {
  try {
    const body = await request.json();
    const { text, mode, context } = requestSchema.parse(body);

    let intent = buildIntentFromText(text, mode, context);
    let source: "openai" | "fallback" = "fallback";

    if (process.env.OPENAI_API_KEY) {
      try {
        intent = await buildIntentFromTextWithOpenAI(text, mode, context);
        source = "openai";
      } catch {
        // Keep local parser as reliability fallback.
      }
    }

    const clarification =
      intent.intent === "plan_work_blocks"
        ? getWorkClarificationPrompt(text, intent)
        : null;

    return NextResponse.json({ intent, source, clarification });
  } catch (error) {
    const message =
      error instanceof Error ? error.message : "Impossible d'analyser la demande.";

    return NextResponse.json({ error: message }, { status: 400 });
  }
}
