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

export async function PATCH(
  req: Request,
  { params }: { params: { storeId: string } }
) {
  try {
    const body = await req.json();
    const { orderItems } = body;

    if (!orderItems || !Array.isArray(orderItems)) {
      return new NextResponse("Items requis", { status: 400 });
    }

    const order = await prismadb.order.findUnique({
      where: {
        storeId: params.storeId,
        id: orderItems[0].orderId
      }
    });

    if (!order) {
      return new NextResponse("Aucune commande associé", { status: 400 });
    }

    if (order.isDecrementedStocks) {
      await Promise.all(orderItems.map(async (item: any) => {
        if (item.productId) {
          const product = await prismadb.product.findUnique({
            where: {
              id: item.productId,
            },
          });
  
          if (product) {
            const newStock = product.stock + item.quantity;
            await prismadb.product.update({
              where: {
                id: item.productId,
              },
              data: {
                stock: newStock,
              },
            });
          }
        }
      }));

      //on met isDecrementedStocks à false pour dire que les stocks n'ont pas été décrémenté pour cette commande
      await prismadb.order.update({
        where: {
          id: order.id,
        },
        data: {
          isDecrementedStocks: false,
          isPaid: false
        },
      });
      return new NextResponse("Décrémentation des stocks effectuée", { status: 200 });

      return new NextResponse("Remise en stock effectuée", { status: 200 });
    }
    else {
      return new NextResponse("Remise en stock déjà effectuée", { status: 200 });
    }

  } catch (error) {
    console.error("INCREASING_PATCH", error);
    return new NextResponse("Internal server error", { status: 500 });
  }
}
