import { prisma } from "./src/core/prisma";

async function main() {
  const stationId = "8437cb2d-fde3-41a0-8e01-598280305be8";
  const shopId = "9812c0c9-db1c-4d5c-8b7d-9d7ee69e81a0";

  const items = await prisma.orderItem.findMany({
    where: {
      status: { notIn: ["DELIVERED", "CANCELLED"] },
      order: {
        shopId,
        status: { notIn: ["DRAFT", "CANCELLED"] },
        OR: [
          { cashSessionId: null },
          { cashSession: { status: "OPEN" } },
        ],
      },
      OR: [
        { currentStepStationId: stationId },
        { logisticsRouteId: null, product: { stationId } },
      ],
    },
    include: {
      order: {
        select: {
          id: true,
          status: true,
          createdAt: true,
          paidAt: true,
          cashSessionId: true,
          sessionOrderNumber: true,
          stationId: true,
          cashSession: {
            select: {
              id: true,
              status: true,
              openedAt: true,
              closedAt: true,
              stationId: true,
            },
          },
        },
      },
      product: {
        select: {
          name: true,
          stationId: true,
        },
      },
    },
    orderBy: { createdAt: "asc" },
  });

  const rows = items.map((i) => ({
    itemId: i.id,
    itemStatus: i.status,
    quantity: i.quantity,
    product: i.product?.name,
    orderId: i.orderId,
    orderStatus: i.order.status,
    orderCreatedAt: i.order.createdAt,
    paidAt: i.order.paidAt,
    sessionOrderNumber: i.order.sessionOrderNumber,
    cashSessionId: i.order.cashSessionId,
    cashSessionStatus: i.order.cashSession?.status ?? null,
    cashSessionOpenedAt: i.order.cashSession?.openedAt ?? null,
    cashSessionClosedAt: i.order.cashSession?.closedAt ?? null,
  }));

  console.log(JSON.stringify(rows, null, 2));
}

main()
  .catch((error) => {
    console.error(error);
    process.exitCode = 1;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

