import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@/lib/supabase/server';
import { recordMilestone, recordRepeatMilestone } from '@/lib/success-tracking';
import type { MilestoneType } from '@/lib/types/success-tracking';

// Milestones that can be triggered from client-side
const CLIENT_MILESTONES: MilestoneType[] = [
  'first_rating',
  'five_star_given',
  'first_message',
  'first_application',
  'first_job_posted',
  'onboarding_complete',
  'profile_complete',
];

const REPEATABLE: MilestoneType[] = ['five_star_given'];

/**
 * POST /api/success-tracking/record
 * Records a milestone for the authenticated user.
 * Only allows certain milestones from client-side for security.
 */
export async function POST(request: NextRequest) {
  try {
    const supabase = await createClient();
    const { data: { user } } = await supabase.auth.getUser();

    if (!user) {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }

    const { milestone_type, metadata } = await request.json();

    if (!milestone_type || !CLIENT_MILESTONES.includes(milestone_type)) {
      return NextResponse.json({ error: 'Invalid milestone type' }, { status: 400 });
    }

    // Get user type
    const { data: profile } = await supabase
      .from('profiles')
      .select('type')
      .eq('id', user.id)
      .single();

    const userType = (profile?.type as 'worker' | 'contractor') || 'worker';

    let recorded: boolean;
    if (REPEATABLE.includes(milestone_type)) {
      recorded = await recordRepeatMilestone(user.id, userType, milestone_type as any, metadata);
    } else {
      recorded = await recordMilestone(user.id, userType, milestone_type, metadata);
    }

    return NextResponse.json({ recorded });
  } catch (err) {
    console.error('Record milestone error:', err);
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
  }
}
