import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';

// GET /api/pedidos - list purchase orders
export async function GET() {
  try {
    const orders = await prisma.purchaseOrder.findMany({
      include: { farm: { select: { id: true, name: true } }, lines: true },
      orderBy: { createdAt: 'desc' },
    });
    return NextResponse.json(orders);
  } catch {
    return NextResponse.json({ error: 'Error fetching purchase orders' }, { status: 500 });
  }
}

// POST /api/pedidos - create purchase order
export async function POST(request: Request) {
  try {
    const body = await request.json();
    const { poNumber, farmId, deliveryDate, notes, lines } = body;
    if (!poNumber) return NextResponse.json({ error: 'Número de pedido requerido' }, { status: 400 });

    const po = await prisma.purchaseOrder.create({
      data: {
        poNumber,
        farmId: farmId || null,
        deliveryDate: deliveryDate ? new Date(deliveryDate) : null,
        notes: notes || null,
        lines: {
          create: (lines || []).map((l: any) => ({
            productCode: l.productCode,
            productName: l.productName,
            boxType: l.boxType || null,
            stemCount: parseInt(l.stemCount) || 0,
            quantity: parseInt(l.quantity) || 1,
            unitPrice: l.unitPrice ? parseFloat(l.unitPrice) : null,
            dutyRate: l.dutyRate !== undefined ? parseFloat(l.dutyRate) : null,
            notes: l.notes || null,
          })),
        },
      },
      include: { farm: true, lines: true },
    });
    return NextResponse.json(po, { status: 201 });
  } catch (e: any) {
    if (e?.code === 'P2002') return NextResponse.json({ error: 'Número de pedido ya existe' }, { status: 409 });
    return NextResponse.json({ error: 'Error al crear pedido' }, { status: 500 });
  }
}
