import db from "@/lib/db";
import { NextRequest, NextResponse } from "next/server";
import { getLogger } from "@/utils/logger";
import { authOptions } from "@/app/api/auth/[...nextauth]/auth-options";
import { getServerSession } from "next-auth";

const logger = getLogger("api/order-placed/[orderNumber]")


export async function GET(req: NextRequest, { params }: { params: { orderNumber: string } }) {
    const { orderNumber } = params;

    try {

        const session = await getServerSession(authOptions)
        if (!session?.user.uuid) {
            return NextResponse.json({ mssg: "You are not authorized !" }, { status: 403 })
        }

        const user = await db.user.findUnique({
            where: {
                uuid: session?.user?.uuid
            },
            include: {
                profile: true
            } 
        })

        if (!user?.profile?.id) {
            return NextResponse.json({ mssg: "Profile not found" }, { status: 404 });
        }

        const order = await db.orders.findUnique({
            where: {
                id: orderNumberToId(parseInt(orderNumber)),
            },
            include: {
                shipment_details: true,
                address: {
                    include: {
                        shipping_zone: true,
                    },
                },
                payment: true,
            },
        })

        if (order?.profile_id !== user?.profile?.id) {
            return NextResponse.json({ mssg: "You are not authorized to view this order" }, { status: 403 });
        }

        // console.log(order)

        if (!order) {
            return NextResponse.json({ mssg: "Order not found" }, { status: 404 });
        }

        return NextResponse.json(order, { status: 200 });
    } catch (error: any) {
        logger.error("Failed to fetch order details", {
            error: error?.config?.data ?? error?.message ?? "Unknown error",
        });
        return NextResponse.json({ message: "Internal Server Error" }, { status: 500 });
    }
}

function orderNumberToId(orderNumber: number): number {

    return orderNumber - 10299
}