import { db } from "@/lib/db"
import { getCurrentUser } from "@/lib/session"
import { User } from "@prisma/client"
import { revalidatePath } from "next/cache"
import { NextRequest, NextResponse } from "next/server"

/**
 * @swagger
 * /api/users/gamelists:
 *   put:
 *     description: Changes gamelists of a user
 *                 id in body must match userid
 *     responses:
 *       200:
 *         description: Request handled!
 *       401:
 *         description: Unauthorized
 *
 */

export async function PUT(req: NextRequest) {
    const sessionUser = await getCurrentUser()

    const data: User = await req.json()

    if (!sessionUser || sessionUser.id != data.id) {
        return NextResponse.json({ message: 'Unauthorized' }, { status: 401 })
    }

    try {
        const dbUser = await db.user.findFirst({
            where: {
                id: sessionUser.id
            },
            select: {
                planningGameList: true,
                playingGameList: true,
                finishedGameList: true
            },
        })

        if (dbUser) {
            if (!data.finishedGameList) data.finishedGameList = dbUser?.finishedGameList
            if (!data.planningGameList) data.planningGameList = dbUser?.planningGameList
            if (!data.playingGameList) data.playingGameList = dbUser?.playingGameList

            await db.user.update({
                where: {
                    id: sessionUser.id
                },
                data: {
                    finishedGameList: data.finishedGameList,
                    planningGameList: data.planningGameList,
                    playingGameList: data.playingGameList
                }
            })
        }

        const path = req.nextUrl.searchParams.get('path') || '/'
        revalidatePath(path)

        return NextResponse.json({ message: 'Game added' }, { status: 201 })
    } catch (error: any) {
        return NextResponse.json({ message: error.message }, { status: 500 })
    }
}