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

export async function POST(request: Request, props: { params: Promise<{ id: string }> }) {
  try {
    const { id } = await props.params;

    // Fetch the original order with its lines
    const originalOrder = await prisma.order.findUnique({
      where: { id },
      include: { lines: true }
    });

    if (!originalOrder) {
      return NextResponse.json({ error: 'Orden original no encontrada' }, { status: 404 });
    }

    // Clone logic: change PO slightly to avoid unique constraint
    const suffix = '-CLON-' + Math.floor(Math.random() * 1000);
    const newPO = originalOrder.po + suffix;

    // Create the new order using correct Prisma field names
    const clonedOrder = await prisma.order.create({
      data: {
        po: newPO,
        orderNumber: originalOrder.orderNumber,
        creationDate: originalOrder.creationDate,
        deliveryDate: originalOrder.deliveryDate,
        awb: originalOrder.awb,
        master: originalOrder.master,
        shipdt: originalOrder.shipdt,
        status: 'PENDING',
        billingCustomerId: originalOrder.billingCustomerId,
        shippingCustomerId: originalOrder.shippingCustomerId,
        masterCustomerId: originalOrder.masterCustomerId,
        lines: {
          create: originalOrder.lines.map(line => ({
            quantity: line.quantity,
            trackingNumber: null,
            airwayBill: line.airwayBill,
            price: line.price,
            status: 'PENDING',
            message: line.message,
            observaciones: 'Reenvío / Clonación',
            productId: line.productId,
            farmId: line.farmId,
          }))
        }
      }
    });

    return NextResponse.json(clonedOrder);
  } catch (error: unknown) {
    console.error('Error cloning order:', error);
    return NextResponse.json({ error: 'Error al clonar la orden' }, { status: 500 });
  }
}
