import { cookies } from "next/headers";
import { NextRequest, NextResponse } from "next/server";
import { prisma } from '@/lib/prisma'
import { createSession, linkedIn } from "@/auth/lucia";
type linkedInUser = {
    sub: string,
    email: string,
    emailVerified: boolean,
    name: string,
    given_name: string,
    family_name: string,
    picture: string,
    locale: {
        country: string,
        language: 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, refreshTokenExpiresAt } = await linkedIn.validateAuthorizationCode(code)
        console.log('accessToken------------>', accessToken);
        const linkedInRes = await fetch("https://api.linkedin.com/v2/userinfo", {
            cache: 'no-cache',
            headers: {
                Authorization: `Bearer ${accessToken}`
            },
            method: 'GET'
        },)
        const linkedInData = (await linkedInRes.json()) as linkedInUser
        console.log(linkedInData);
        const savedUser = await prisma?.user?.findUnique({
            where: {
                email: linkedInData?.email
            }
        })
        if (savedUser) {
            await createSession(savedUser.id)
        } else {
            const createdUser = await prisma?.user?.create(
                {
                    data: {
                        id: linkedInData?.sub,
                        email: linkedInData?.email,
                        provider: 'linkedIn',
                        firstName: linkedInData?.given_name,
                        lastName: linkedInData?.family_name,
                        imageUrl: linkedInData?.picture,
                        imageName: linkedInData?.picture,
                        otherInfo: {
                            language: linkedInData?.locale?.language,
                            country: linkedInData?.locale?.country,
                        }
                    }
                }
            )
            await createSession(createdUser.id)
        }
        return NextResponse.redirect(new URL(process.env.WEBSITE_URL ?? '/'), { status: 302 })

    } catch (error) {
        return Response.json({
            error: error?.message
        })
    }
}