import { NextRequest, NextResponse } from "next/server";
import { prisma } from '@/lib/prisma'
import { createSession, facebook } from "@/auth/lucia";
type facebookUser = {
    id: string,
    email: string,
    name: string,
    picture: {
        data: {
            height: number,
            is_silhouette: boolean,
            url: string,
            width: number
        }
    },
    first_name: string,
    last_name: string,
}

export const GET = async (req: NextRequest) => {
    try {
        const url = new URL(req.url)
        const searchParams = url.searchParams

        const code = searchParams.get('code')
        if (!code) {
            return Response.json({ error: "Invalid request" }, { status: 400 })
        }

        console.log('code------------>', code);

        // const { accessToken, idToken, refreshToken, accessTokenExpiresAt } = await google.validateAuthorizationCode(code, codeVarifier)
        const { accessToken, accessTokenExpiresAt } = await facebook.validateAuthorizationCode(code)
        console.log('accessToken------------>', accessToken);
        const facebookRes = await fetch(`https://graph.facebook.com/me?access_token=${accessToken}&fields=id,name,email,picture,first_name,last_name`, {
            cache: 'no-cache',
            method: 'GET'
        },)
        const facebookData = await facebookRes.json() as facebookUser
        console.log(facebookData);
        const savedUser = await prisma?.user?.findUnique({
            where: {
                email: facebookData?.email
            }
        })
        if (savedUser) {
            await createSession(savedUser.id)
        } else {
            const createdUser = await prisma?.user?.create(
                {
                    data: {
                        id: facebookData?.id,
                        email: facebookData?.email,
                        provider: 'facebook',
                        imageUrl: facebookData?.picture?.data?.url,
                        imageName: facebookData?.picture?.data?.url,
                        firstName: facebookData?.first_name,
                        lastName: facebookData?.last_name
                    }
                }
            )
            await createSession(createdUser.id)
        }
        return NextResponse.redirect(new URL(process.env.WEBSITE_URL ?? '/'), { status: 302 })

    } catch (error) {
        return Response.json({
            error: error?.message
        })
    }
}