import { logApiError } from "@/lib/api/security";
import { NextResponse } from "next/server";
import { runMindavioAI } from "@/lib/ai/brain";
import { createRouteClient } from "@/lib/supabase/route";
import type { ConversationMessage } from "@/lib/ai/types";

export const maxDuration = 30;

export async function POST(req: Request) {
  try {
    const supabase = await createRouteClient();
    const {
      data: { user },
    } = await supabase.auth.getUser();

    if (!user) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
    }

    const { message, messages, workspaceTeamId } = await req.json();

    if (!message || typeof message !== "string") {
      return NextResponse.json({ error: "Message required" }, { status: 400 });
    }

    const conversationMessages: ConversationMessage[] = Array.isArray(messages)
      ? messages
          .filter(
            (item): item is ConversationMessage =>
              item &&
              (item.role === "user" || item.role === "assistant") &&
              typeof item.content === "string"
          )
          .slice(-20)
      : [{ role: "user", content: message }];

    const result = await runMindavioAI(user.id, conversationMessages, {
      activeTeamId: typeof workspaceTeamId === "string" ? workspaceTeamId : null,
    });

    return NextResponse.json({
      text: result.text,
      provider: result.provider,
      model: result.model,
    });
  } catch (error) {
    logApiError("AI chat error:", error);
    return NextResponse.json(
      { error: "Something went wrong. Please try again." },
      { status: 500 }
    );
  }
}
