import { NextResponse } from "next/server";
import type { AIMessage, Business } from "@/lib/types";
import { formatMLStrategyBrief, generateMLStrategy } from "@/lib/ml/bad-ads-strategy";

function fallbackResponse(question: string, business: Business | null) {
  if (!business) {
    return "Load a demo or complete onboarding so the ML strategy engine can analyze your business and ad copy.";
  }
  const brief = generateMLStrategy(business, question);
  return formatMLStrategyBrief(brief);
}

export async function POST(req: Request) {
  try {
    const { messages, business } = (await req.json()) as {
      messages: AIMessage[];
      business?: Business;
    };
    const latest = messages[messages.length - 1]?.content ?? "";

    if (!business?.input) {
      return NextResponse.json({
        message: fallbackResponse(latest, null),
        mlPowered: true,
      });
    }

    const mlBrief = generateMLStrategy(business, latest);
    const mlContext = formatMLStrategyBrief(mlBrief);

    const apiKey = process.env.OPENAI_API_KEY;
    if (!apiKey) {
      return NextResponse.json({
        message: mlContext,
        mlBrief,
        mlPowered: true,
      });
    }

    const businessContext = [
      `Business: ${business.input.businessName}`,
      `Industry: ${business.input.industry}`,
      `Positioning: ${business.profile.brandPositioning}`,
      `BrandLxft Score: ${business.brandScore.overall}`,
      `Top opportunity: ${business.opportunities[0]?.title ?? business.metrics.topPriorityToday}`,
      business.socialMediaAnalysis
        ? `Social visibility ${business.socialMediaAnalysis.visibilityScore}/100, pick share ${business.socialMediaAnalysis.yourPickSharePercent}%`
        : "",
      business.websiteAestheticAnalysis
        ? `Website aesthetic ${business.websiteAestheticAnalysis.overallScore}/100`
        : "",
    ]
      .filter(Boolean)
      .join("\n");

    const openAiResponse = await fetch("https://api.openai.com/v1/chat/completions", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${apiKey}`,
      },
      body: JSON.stringify({
        model: process.env.OPENAI_MODEL ?? "gpt-4o-mini",
        temperature: 0.4,
        messages: [
          {
            role: "system",
            content:
              "You are BrandLxft AI co-founder. Ground every answer in the ML Ad Perceptions brief provided (CHI 2021 bad ads dataset, 500 ads). Always include: what is happening, why it matters, what to do next, revenue potential. Cite ML scores when discussing ads/marketing. Be direct.",
          },
          { role: "system", content: businessContext },
          { role: "system", content: `ML Ad Perceptions brief:\n${mlContext}` },
          ...messages.map((m) => ({
            role: m.role === "assistant" ? "assistant" : "user",
            content: m.content,
          })),
        ],
      }),
    });

    if (!openAiResponse.ok) {
      return NextResponse.json({
        message: mlContext,
        mlBrief,
        mlPowered: true,
      });
    }

    const json = (await openAiResponse.json()) as {
      choices?: Array<{ message?: { content?: string } }>;
    };

    return NextResponse.json({
      message: json.choices?.[0]?.message?.content?.trim() || mlContext,
      mlBrief,
      mlPowered: true,
    });
  } catch {
    return NextResponse.json({
      message: "ML strategy engine error. Focus on your highest-urgency opportunity and re-run ad copy through the model.",
      mlPowered: true,
    });
  }
}
