import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import { calculateShipDate, formatDateToYYYYMMDD } from '@/lib/dateUtils';

export async function PATCH(request: Request) {
  try {
    const { lineIds, newDeliveryDate } = await request.json();

    if (!Array.isArray(lineIds) || lineIds.length === 0) {
      return NextResponse.json({ error: 'Debes seleccionar al menos una línea para cambiar la fecha de entrega' }, { status: 400 });
    }

    if (!newDeliveryDate) {
      return NextResponse.json({ error: 'Debes especificar la nueva fecha de entrega' }, { status: 400 });
    }

    const parsedDelivery = new Date(newDeliveryDate);
    if (isNaN(parsedDelivery.getTime())) {
      return NextResponse.json({ error: 'Fecha de entrega inválida' }, { status: 400 });
    }

    // Buscar las órdenes de las líneas seleccionadas
    const lines = await prisma.orderLine.findMany({
      where: { id: { in: lineIds } },
      select: { id: true, orderId: true, order: true }
    });

    const uniqueOrderIds = Array.from(new Set(lines.map(l => l.orderId)));

    let updatedOrders = 0;
    for (const orderId of uniqueOrderIds) {
      const order = await prisma.order.findUnique({ where: { id: orderId } });
      if (order) {
        const agency = order.service || 'FEDEX';
        const recalculatedShipdt = calculateShipDate(parsedDelivery, agency);

        await prisma.order.update({
          where: { id: orderId },
          data: {
            deliveryDate: parsedDelivery,
            shipdt: recalculatedShipdt,
          }
        });
        updatedOrders++;
      }
    }

    return NextResponse.json({
      success: true,
      message: `Se actualizó exitosamente la fecha de entrega a ${formatDateToYYYYMMDD(parsedDelivery)} para ${lines.length} líneas (${updatedOrders} órdenes). La fecha de vuelo (SHIPDT) se recalculó automáticamente.`,
      updatedOrders,
      updatedLines: lines.length,
      newDeliveryDate: formatDateToYYYYMMDD(parsedDelivery),
    });

  } catch (error: any) {
    console.error('Error updating bulk delivery date:', error);
    return NextResponse.json({ error: error.message || 'Error al cambiar la fecha de entrega' }, { status: 500 });
  }
}
