import { createServerClient, type CookieOptions } from '@supabase/ssr' import { cookies } from 'next/headers' import { NextResponse } from 'next/server' export async function POST() { console.log("\nšŸ”„ === SYNC API CALLED ==="); const cookieStore = cookies() // Debug: Log all cookies to see if auth token is present const allCookies = cookieStore.getAll().map(c => c.name); console.log("Cookies received:", allCookies); // Create authenticated Supabase client const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { get(name: string) { return cookieStore.get(name)?.value }, set(name: string, value: string, options: CookieOptions) { try { cookieStore.set({ name, value, ...options }) } catch (error) { // Route handlers can't set cookies in some Next.js versions/contexts, // but we only need to READ them for auth here. } }, remove(name: string, options: CookieOptions) { try { cookieStore.delete({ name, ...options }) } catch (error) { // Ignore } }, }, } ) // Get current user console.log("Getting current user..."); const { data: { user }, error: authError } = await supabase.auth.getUser() if (authError || !user) { console.error("āŒ Not authenticated:", authError?.message); return NextResponse.json({ error: 'Not authenticated', details: authError?.message }, { status: 401 }) } console.log("āœ… User authenticated:", user.id); try { // Check if user exists console.log("Checking if user exists in DB..."); const { data: existingUser, error: fetchError } = await supabase .from('users') .select('id') .eq('id', user.id) .single() console.log("Fetch result:", { existingUser, fetchError }); if (!existingUser) { console.log(`šŸ”„ User ${user.id} not found. Inserting...`) const insertData = { id: user.id, email: user.email, full_name: user.user_metadata.full_name || null, avatar_url: user.user_metadata.avatar_url || null, credits: 5 }; console.log("Insert data:", insertData); // Insert user using the AUTHENTICATED client (acting as the user) const { data: insertResult, error: insertError } = await supabase .from('users') .insert(insertData) .select() if (insertError) { console.error('āŒ Sync insert error:', insertError) return NextResponse.json({ error: insertError.message }, { status: 500 }) } console.log("āœ… User created successfully:", insertResult); return NextResponse.json({ status: 'created', user: insertResult }) } console.log("āœ… User already exists"); return NextResponse.json({ status: 'exists' }) } catch (err) { console.error('āŒ Sync error:', err) return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 }) } }