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 { getLogger } from "@/utils/logger";

const logger = getLogger("/api/wishlist/[uuid]")

export const DELETE = async (request: NextRequest, { params }: { params: { uuid: string } }) => {

    try {

        const session = await getServerSession(authOptions);

        if (!session?.user.uuid) {
            return NextResponse.json({ mssg: "Login first" }, { status: 403 })
        }

        const user = await db.user.findUnique({
            where: {
                uuid: session.user.uuid
            },
            include: {
                profile: true
            }
        })

        if (user?.profile?.id === undefined) {
            return NextResponse.json({ mssg: "User profile not found" }, { status: 404 });
        }

        const wishlist = await db.wishlist.findUnique({
            where: {
                profile_id: user.profile.id
            },
            include: {
                WishListItem: true
            }
        })

        const wishlistItem = await db.wishListItem.findUnique({
            where: {
                uuid: params.uuid
            }
        })

        if (!wishlistItem){
            return NextResponse.json({mssg: "Wishlist item does not exist!"}, {status: 404})
        }

        if (!wishlist) {
            return NextResponse.json({ mssg: "Wishlist not found" }, { status: 404 });
        }

        if (wishlistItem.wishlist_id != wishlist.id){
            return NextResponse.json({mssg: "You are not authorized"}, {status: 403})
        }

        await db.wishListItem.delete({
            where: {
                uuid: params.uuid
            }
        })

        var updatedWishlist = await db.wishlist.findUnique({
            where: {
                id: wishlist.id
            },
            include: {
                WishListItem: {
                    include: {
                        variant: {
                            include: {
                                variant_images: true
                            }
                        }
                    }
                }
            }
        })

        return NextResponse.json({mssg: "Item deleted from wishlist", wishlist: updatedWishlist}, {status: 200})

    }
    catch (error: any) {
        logger.error(`Failed to fetch wishlist of uuid ${params.uuid}`, {
            error: error?.config?.data ?? error?.message ?? "Unknown error"
        })
        return new NextResponse("Internal server error", { status: 500 })
    }
}

