import { NextRequest, NextResponse } from 'next/server' import { createClient } from '@supabase/supabase-js' const supabase = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.SUPABASE_SERVICE_ROLE_KEY! ) export async function POST(request: NextRequest) { try { // Get the authorization header const authHeader = request.headers.get('authorization') if (!authHeader) { return NextResponse.json({ error: 'No authorization header' }, { status: 401 }) } // Create a Supabase client with the user's session const userSupabase = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { global: { headers: { Authorization: authHeader } } } ) // Get the current user const { data: { user }, error: userError } = await userSupabase.auth.getUser() if (userError || !user) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const body = await request.json() const { action, ...trackingData } = body let updateData: any = { updated_at: new Date().toISOString() } switch (action) { case 'start': const { tourVersion: startVersion } = trackingData updateData = { ...updateData, welcome_tour_started_at: new Date().toISOString(), welcome_tour_current_step: 0, welcome_tour_steps_viewed: [0], welcome_tour_version: startVersion || 'v1' } break case 'step': const { stepIndex, stepsViewed, tourVersion: stepVersion } = trackingData updateData = { ...updateData, welcome_tour_current_step: stepIndex, welcome_tour_steps_viewed: stepsViewed, welcome_tour_version: stepVersion || 'v1' } break case 'video_watched': const { tourVersion: videoVersion } = trackingData updateData = { ...updateData, welcome_tour_video_watched: true, welcome_tour_version: videoVersion || 'v1' } break case 'plan_selected': const { plan, billing, tourVersion: planVersion } = trackingData updateData = { ...updateData, welcome_tour_selected_plan: plan, welcome_tour_selected_billing: billing, welcome_tour_version: planVersion || 'v1' } break case 'complete': const { plan: selectedPlan, billing: selectedBilling, totalTimeSeconds, tourVersion: completeVersion } = trackingData updateData = { ...updateData, welcome_tour_completed: true, welcome_tour_completed_at: new Date().toISOString(), welcome_tour_completion_type: 'completed', welcome_tour_selected_plan: selectedPlan, welcome_tour_selected_billing: selectedBilling, welcome_tour_total_time_seconds: totalTimeSeconds, welcome_tour_version: completeVersion || 'v1' } break case 'close': const { completionType, totalTimeSeconds: closeTime, tourVersion: closeVersion } = trackingData updateData = { ...updateData, welcome_tour_completed: true, welcome_tour_completed_at: new Date().toISOString(), welcome_tour_completion_type: completionType, welcome_tour_total_time_seconds: closeTime, welcome_tour_version: closeVersion || 'v1' } break default: return NextResponse.json({ error: 'Invalid action' }, { status: 400 }) } // Update the user's profile const { error: updateError } = await supabase .from('profiles') .update(updateData) .eq('id', user.id) if (updateError) { console.error('Error updating profile:', updateError) return NextResponse.json({ error: 'Failed to update profile' }, { status: 500 }) } return NextResponse.json({ success: true }) } catch (error) { console.error('Error in tour-tracking API:', error) return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) } }