import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@/lib/supabase/server';

/**
 * GET /api/favorites - List contractor's favorite workers
 */
export async function GET() {
  try {
    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('worker_favorites')
      .select(`
        id, worker_id, notes, created_at,
        profiles!worker_favorites_worker_id_fkey(name, phone, email, suburb, avatar_url),
        worker_profiles!worker_favorites_worker_id_fkey(trades, experience_years)
      `)
      .eq('contractor_id', user.id)
      .order('created_at', { ascending: false });

    if (error) {
      // Fallback: simpler query without joins if FK names don't match
      const { data: simple, error: simpleErr } = await supabase
        .from('worker_favorites')
        .select('id, worker_id, notes, created_at')
        .eq('contractor_id', user.id)
        .order('created_at', { ascending: false });

      if (simpleErr) {
        console.error('Favorites fetch error:', simpleErr);
        return NextResponse.json({ error: 'Failed to fetch favorites' }, { status: 500 });
      }
      return NextResponse.json({ data: simple });
    }

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

/**
 * POST /api/favorites - Add a worker to favorites
 */
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 { worker_id, notes } = await request.json();
    if (!worker_id) {
      return NextResponse.json({ error: 'worker_id required' }, { status: 400 });
    }

    const { data, error } = await supabase
      .from('worker_favorites')
      .upsert(
        { contractor_id: user.id, worker_id, notes: notes || null },
        { onConflict: 'contractor_id,worker_id' }
      )
      .select()
      .single();

    if (error) {
      console.error('Favorite add error:', error);
      return NextResponse.json({ error: 'Failed to add favorite' }, { status: 500 });
    }

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

/**
 * DELETE /api/favorites - Remove a worker from favorites
 */
export async function DELETE(request: NextRequest) {
  try {
    const supabase = await createClient();
    const { data: { user } } = await supabase.auth.getUser();
    if (!user) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });

    const { worker_id } = await request.json();
    if (!worker_id) {
      return NextResponse.json({ error: 'worker_id required' }, { status: 400 });
    }

    const { error } = await supabase
      .from('worker_favorites')
      .delete()
      .eq('contractor_id', user.id)
      .eq('worker_id', worker_id);

    if (error) {
      console.error('Favorite delete error:', error);
      return NextResponse.json({ error: 'Failed to remove favorite' }, { status: 500 });
    }

    return NextResponse.json({ success: true });
  } catch (err) {
    console.error('Favorites DELETE error:', err);
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
  }
}
