import { NextResponse } from "next/server";
import {
  buildFinalAssessmentInput,
  buildFinalAssessmentInstructions,
} from "@/lib/prompts";
import {
  getFinalAssessmentModel,
  parseStructuredResponse,
} from "@/lib/openai";
import {
  DemoFinalizeRequestSchema,
  FinalAssessmentSchema,
} from "@/lib/schemas";
import { createRouteErrorResponse } from "@/lib/route-errors";
import { hydrateMetrics } from "@/lib/types";
import type { FinalAssessment } from "@/lib/types";

export const runtime = "nodejs";

export async function POST(request: Request) {
  try {
    const payload = DemoFinalizeRequestSchema.parse(await request.json());

    const finalStatus =
      payload.conversationStatus ??
      (payload.currentStatus === "ongoing" ? "manual_end" : payload.currentStatus);

    const parsed = await parseStructuredResponse({
      schema: FinalAssessmentSchema,
      schemaName: "final_assessment",
      model: getFinalAssessmentModel(),
      instructions: buildFinalAssessmentInstructions(payload.scenario),
      input: buildFinalAssessmentInput(
        payload.scenario,
        payload.transcript,
        payload.liveEvaluations,
        finalStatus,
      ),
      temperature: 0.25,
      maxOutputTokens: 900,
    });

    const finalAssessment: FinalAssessment = {
      outcome: finalStatus,
      summary: parsed.summary,
      readiness: parsed.readiness,
      metricSummary: hydrateMetrics(parsed.metricSummary),
      strengths: parsed.strengths,
      missedOpportunities: parsed.missedOpportunities,
      turningPoints: parsed.turningPoints,
      actionPlan: parsed.actionPlan,
      closingAdvice: parsed.closingAdvice,
    };

    return NextResponse.json({ finalAssessment });
  } catch (error) {
    return createRouteErrorResponse(error, "La generation du bilan a echoue.");
  }
}
