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

const CEO_PIN = '5050';

/**
 * GET /api/success-tracking/milestones - Get milestones
 * Regular user: returns own milestones
 * Admin (x-ceo-pin: 5050): returns all milestones with filters
 */
export async function GET(request: NextRequest) {
  try {
    const pin = request.headers.get('x-ceo-pin');

    if (pin === CEO_PIN) {
      // Admin: all milestones with filters
      const admin = getSupabaseAdmin();
      const url = new URL(request.url);
      const userId = url.searchParams.get('user_id');
      const milestoneType = url.searchParams.get('type');
      const userType = url.searchParams.get('user_type');
      const limit = parseInt(url.searchParams.get('limit') || '100');

      let query = admin
        .from('success_milestones')
        .select('*')
        .order('created_at', { ascending: false })
        .limit(Math.min(limit, 500));

      if (userId) query = query.eq('user_id', userId);
      if (milestoneType) query = query.eq('milestone_type', milestoneType);
      if (userType) query = query.eq('user_type', userType);

      const { data, error } = await query;

      if (error) {
        console.error('Admin milestones fetch error:', error);
        return NextResponse.json({ error: 'Failed to fetch milestones' }, { status: 500 });
      }

      return NextResponse.json({ data });
    }

    // Regular user: own milestones
    const supabase = await createClient();
    const { data: { user } } = await supabase.auth.getUser();

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

    const { data, error } = await supabase
      .from('success_milestones')
      .select('*')
      .eq('user_id', user.id)
      .order('created_at', { ascending: false });

    if (error) {
      return NextResponse.json({ error: 'Failed to fetch milestones' }, { status: 500 });
    }

    return NextResponse.json({ data });
  } catch (err) {
    console.error('Milestones GET error:', err);
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
  }
}
