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

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

  const rows = await db.select({
    id: pagos.id,
    periodo: pagos.periodo,
    fechaPago: pagos.fechaPago,
    monto: pagos.monto,
    notas: pagos.notas,
  }).from(pagos).orderBy(desc(pagos.periodo));
  return Response.json(rows);
}

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 body = await req.json();
  const { periodo, monto, fechaPago, notas } = body;

  if (!periodo || !/^\d{4}-\d{2}$/.test(periodo)) {
    return Response.json({ error: "Período inválido (formato: YYYY-MM)" }, { status: 400 });
  }
  if (typeof monto !== "number" || monto <= 0) {
    return Response.json({ error: "Monto debe ser un número positivo" }, { status: 400 });
  }

  const [created] = await db.insert(pagos).values({
    contratoId: 1,
    periodo,
    monto,
    fechaPago: fechaPago || null,
    notas: notas || null,
    creadoPor: session.user.name,
  }).returning({
    id: pagos.id,
    periodo: pagos.periodo,
    fechaPago: pagos.fechaPago,
    monto: pagos.monto,
    notas: pagos.notas,
  });

  return Response.json(created, { status: 201 });
}
