import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { pagos } from "@/lib/schema";
import { eq, and } from "drizzle-orm";

const VALID_ESTADOS = ["ok", "parcial", "impago"];

export async function POST(req: Request) {
  const session = await auth();
  if (!session) return Response.json({ error: "Unauthorized" }, { status: 401 });
  if (session.user.role !== "admin") return Response.json({ error: "Forbidden" }, { status: 403 });

  const { periodo, estado } = await req.json();

  if (!periodo || !/^\d{4}-\d{2}$/.test(periodo)) {
    return Response.json({ error: "Período inválido" }, { status: 400 });
  }
  if (!VALID_ESTADOS.includes(estado)) {
    return Response.json({ error: "Estado inválido" }, { status: 400 });
  }

  // Check if a pago exists for this periodo
  const [existing] = await db.select({ id: pagos.id })
    .from(pagos)
    .where(and(eq(pagos.periodo, periodo), eq(pagos.contratoId, 1)))
    .limit(1);

  if (existing) {
    await db.update(pagos)
      .set({ estado })
      .where(eq(pagos.id, existing.id));
    return Response.json({ id: existing.id, estado });
  } else {
    // Create a minimal pago with estado override and monto=0
    const [created] = await db.insert(pagos).values({
      contratoId: 1,
      periodo,
      monto: 0,
      estado,
      creadoPor: session.user?.email || "admin",
    }).returning({ id: pagos.id });
    return Response.json({ id: created.id, estado });
  }
}
