import { NextRequest, NextResponse } from "next/server";
import { auth } from "@/lib/auth";
import { prisma } from "@/lib/prisma";
import { DEFAULT_SYSTEM_PROMPT } from "@/lib/constants";
import { z } from "zod";

const CreateChatSchema = z.object({
  title: z.string().optional(),
  model: z.string(),
  contextWindow: z.number().int().positive().optional(),
  systemPrompt: z.string().optional(),
  temperature: z.number().min(0).max(2).optional(),
  showThinking: z.boolean().optional(),
  keepAlive: z.number().int().min(-1).optional(),
});

export async function GET() {
  const session = await auth();
  if (!session?.user?.id) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });

  const chats = await prisma.chat.findMany({
    where: { userId: session.user.id },
    orderBy: { updatedAt: "desc" },
    select: { id: true, title: true, model: true, updatedAt: true, createdAt: true },
  });
  return NextResponse.json({ chats });
}

export async function POST(req: NextRequest) {
  const session = await auth();
  if (!session?.user?.id) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });

  const body = await req.json().catch(() => null);
  const parsed = CreateChatSchema.safeParse(body);
  if (!parsed.success) return NextResponse.json({ error: "Invalid body" }, { status: 400 });

  const user = await prisma.user.findUnique({ where: { id: session.user.id } });
  if (!user) return NextResponse.json({ error: "User not found" }, { status: 404 });

  const chat = await prisma.chat.create({
    data: {
      userId: session.user.id,
      title: parsed.data.title ?? "New chat",
      model: parsed.data.model,
      contextWindow: parsed.data.contextWindow ?? user.defaultContext,
      systemPrompt: parsed.data.systemPrompt ?? user.defaultSystemPrompt ?? DEFAULT_SYSTEM_PROMPT,
      temperature: parsed.data.temperature ?? 0.7,
      showThinking: parsed.data.showThinking ?? user.showThinking,
      keepAlive: parsed.data.keepAlive ?? user.defaultKeepAlive,
    },
  });
  return NextResponse.json({ chat });
}
