import { NextRequest, NextResponse } from "next/server";
import { authOptions } from "@/app/api/auth/[...nextauth]/auth-options";
import { getServerSession } from "next-auth";
import db from "@/lib/db";
import { UserRole } from "@prisma/client";
import { getLogger } from "@/utils/logger";

const logger = getLogger("/api/admin/orders");


export async function GET(request: NextRequest) {
    try {

        const {searchParams} = new URL(request.url)

        const page = parseInt(searchParams.get("page") || "1")
        const limit = parseInt(searchParams.get("limit") || "10")


        const session = await getServerSession(authOptions);
        if (!session || session.user.role !== UserRole.ADMIN) {
            return NextResponse.json({ error: "Forbidden" }, { status: 403 })
        }

        const orders = await db.orders.findMany({
            include: {
                shipment_details: true,
                payment: true
            },
            take: limit,
            skip: (page - 1) * limit,
            orderBy: {
                created_on: "desc"
            }
        })

        const totalOrders = await db.orders.count()

        return NextResponse.json({ orders: orders, limit: limit, page: page, total: totalOrders }, { status: 200 })

    } catch (error: any) {
        logger.error("Error fetching orders", { error: error.message });
        return NextResponse.json({ error: "Internal Server Error" }, { status: 500 });
    }
}

