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

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const { ids } = body;

    if (!Array.isArray(ids) || ids.length === 0) {
      return NextResponse.json({ error: 'No se enviaron IDs válidos para eliminar' }, { status: 400 });
    }

    // 1. Obtener los orderIds de las líneas a eliminar
    const lines = await prisma.orderLine.findMany({
      where: { id: { in: ids } },
      select: { id: true, orderId: true }
    });

    if (lines.length === 0) {
      return NextResponse.json({ success: true, count: 0, deletedOrdersCount: 0 });
    }

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

    // 2. Eliminar todas las líneas seleccionadas en una sola operación masiva
    const deleteResult = await prisma.orderLine.deleteMany({
      where: { id: { in: ids } }
    });

    // 3. Revisar cuáles órdenes quedaron vacías para eliminarlas
    const remainingGrouped = await prisma.orderLine.groupBy({
      by: ['orderId'],
      where: { orderId: { in: distinctOrderIds } },
      _count: { id: true }
    });

    const activeOrderIds = new Set(remainingGrouped.map(g => g.orderId));
    const emptyOrderIds = distinctOrderIds.filter(id => !activeOrderIds.has(id));

    let deletedOrdersCount = 0;
    if (emptyOrderIds.length > 0) {
      const orderDeleteResult = await prisma.order.deleteMany({
        where: { id: { in: emptyOrderIds } }
      });
      deletedOrdersCount = orderDeleteResult.count;
    }

    return NextResponse.json({
      success: true,
      count: deleteResult.count,
      deletedOrdersCount
    });
  } catch (error: any) {
    console.error('Error in batch delete order lines:', error);
    return NextResponse.json(
      { error: error.message || 'Error al eliminar órdenes en lote' },
      { status: 500 }
    );
  }
}
