import { NextRequest, NextResponse } from "next/server";
import db from "@/lib/db";
import { getLogger } from "@/utils/logger";
import { getServerSession } from "next-auth";
import { Gender, UserRole } from "@prisma/client";
import { authOptions } from "@/app/api/auth/[...nextauth]/auth-options";

const logger = getLogger("api/customers/[uuid]");


export async function GET(req: NextRequest, params: { params: { uuid: string } }) {
  try {

    const session = await getServerSession(authOptions)

    if (!session?.user.role || session?.user.role !== UserRole.ADMIN) {
      return NextResponse.json({ message: "You are not authorized!" }, { status: 403 });
    }
    const { uuid } = params.params;

    const user = await db.user.findUnique({
      where: { uuid: uuid }
    })

    return NextResponse.json(
      {
        message: "User Information GET Successfully ",
        user: user
      },
      { status: 200 }
    );
  } catch (error: any) {
    logger.error("Admin is facing error fetching user: ", error?.config?.message || error?.message);


    return NextResponse.json(
      { message: "Unsuccessful to Get the users" },
      { status: 500 }
    )
  }
}

export async function PUT(req: NextRequest, params: { params: { uuid: string } }) {
  try {

    const session = await getServerSession(authOptions)

    if (!session?.user.role || session?.user.role !== UserRole.ADMIN) {
      return NextResponse.json({ message: "You are not authorized!" }, { status: 403 });
    }
    const { uuid } = params.params;

    const body = await req.formData();

    // console.log(body)

    var gender
    if(body.get("gender") == "MALE"){
      gender = Gender.MALE
    }
    else if (gender == "FEMALE"){
      gender = Gender.FEMALE
    }
    else {
      gender = Gender.OTHER
    }

    const user = await db.user.update({
      where: { uuid: uuid },
      data: {
        profile: {
          update: {
            mobile_number: body.get("mobile") as string,
            gender: gender,
            date_of_birth: new Date(body.get('date_of_birth') as string),
          }  
        }
      }
    })

    return NextResponse.json(
      {
        message: "User Updated Successfully ",
        user: user
      },
      { status: 200 }
    );
  } catch (error: any) {
    logger.error("Admin is facing error deleting user: ", error?.config?.message || error?.message)
  }
}
