/**
 * Polderfest 2027 — chat API route
 * --------------------------------------------------
 * Les 11 — Vercel AI SDK + Supabase context.
 * Plaats dit bestand op: app/api/chat/route.ts
 *
 * Werking:
 *   1. Haal alle bands op uit Supabase
 *   2. Formatteer als tekst-context
 *   3. Stuur naar OpenAI via streamText + system prompt
 *   4. Return een stream voor useChat
 *
 * Vereist:
 *   - NEXT_PUBLIC_SUPABASE_URL en NEXT_PUBLIC_SUPABASE_ANON_KEY in .env.local
 *   - OPENAI_API_KEY in .env.local
 *   - npm i ai @ai-sdk/openai @supabase/supabase-js
 */

import { streamText } from "ai";
import { openai } from "@ai-sdk/openai";
import { createClient } from "@supabase/supabase-js";

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
);

export async function POST(req: Request) {
  const { messages } = await req.json();

  // 1. Haal alle bands op uit Supabase
  const { data: bands, error } = await supabase.from("bands").select("*");
  if (error) throw error;

  // 2. Format bands als context-string
  const context = bands!
    .map(
      (b) =>
        `- ${b.name} (${b.genre}, ${b.tier}, ${b.day} ${b.start_time} ` +
        `op ${b.stage}, uit ${b.origin_city})`,
    )
    .join("\n");

  // 3. System prompt met context
  const system = `Je bent een festival-assistent voor Polderfest 2027.
Hier zijn alle bands die op het festival spelen:

${context}

Beantwoord vragen van bezoekers over de line-up. Verzin niets — gebruik
alleen bovenstaande data. Antwoord in het Nederlands. Wees beknopt.`;

  // 4. Stream naar OpenAI
  const result = streamText({
    model: openai("gpt-4o-mini"),
    system,
    messages,
  });

  return result.toDataStreamResponse();
}
