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/payments")


export async function GET(req: NextRequest) {

  try {

    const {searchParams} = new URL(req.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) {
      logger.warn("Forbidden", { userRole: session?.user.role });
      return new NextResponse("Forbidden", { status: 403 });
    }

    const payments = await db.payments.findMany({
      skip: (page - 1) * limit,
      take: limit,
      where: {
        payment_method: {
          not: "CASH_ON_DELIVERY"
        }
      },
      orderBy: {
          created_on: "desc"
      },
      select: {
        id: true,
        created_by: true,
        created_on: true,
        paymentCreateTime: true,
        payment_date: true,
        payment_status: true,
        payment_method: true,
        paymentID: true,
        transactionStatus: true,
        amount: true,
        uuid: true,
        order: {
          select: {
            id: true,
            order_total_amount: true
          }
        },
        profile: {
          select: {
            full_name: true,
            id: true
          }
        },
        
      }
    })

    const totalCount = await db.payments.count({
      where: {
        payment_method: {not: "CASH_ON_DELIVERY"}
      }
    })

    return NextResponse.json({ payments: payments, page: page, limit: limit, total: totalCount }, { status: 200 });

    // return NextResponse.json({data: categories}, {status: 200})
  } catch (error: any) {
    logger.error("Failed to fetch payments data", {
      error: error?.config?.data ?? error?.message ?? "Unknown error"
    });

    return new NextResponse("Internal server Error", { status: 500 });
  }
}
