import { NextRequest, NextResponse } from 'next/server';
import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs';
import { cookies } from 'next/headers';

// GET /api/staff/contrats/[id]/employee-email
// Récupère l'email du salarié pour un contrat
export async function GET(
  req: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const contractId = params.id;

    if (!contractId) {
      return NextResponse.json({ error: 'Contract ID manquant' }, { status: 400 });
    }

    // Vérification de l'authentification
    const sb = createRouteHandlerClient({ cookies });
    const { data: { user } } = await sb.auth.getUser();
    if (!user) {
      return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });
    }

    // Vérifier staff pour lire la cible via cookie active_org_id
    let isStaff = false;
    try {
      const { data } = await sb.from('staff_users').select('is_staff').eq('user_id', user.id).maybeSingle();
      isStaff = !!data?.is_staff;
    } catch {}

  let orgId: string | null = null;
    try {
      if (isStaff) {
        const c = cookies();
        orgId = c.get('active_org_id')?.value || null;
      } else {
        const { data, error } = await sb
          .from('organization_members')
          .select('org_id')
          .eq('user_id', user.id)
          .single();
        if (error || !data?.org_id) {
          return NextResponse.json({ error: 'Aucune organisation active' }, { status: 403 });
        }
        orgId = data.org_id;
      }
    } catch {}

    // Récupération des données du contrat depuis Supabase (cddu_contracts)
    let query = sb
      .from('cddu_contracts')
      .select(`
        id,
        employee_matricule,
        org_id
      `)
      .eq('id', contractId);
    // Pour staff, ne filtrez pas par org_id pour éviter les faux not-found, RLS fera foi.
    if (!isStaff && orgId) {
      query = query.eq('org_id', orgId);
    }

    const { data: contract, error: contractError } = await query.single();

    if (contractError || !contract) {
      console.error('Erreur récupération contrat:', contractError);
      return NextResponse.json({ error: 'Contrat non trouvé' }, { status: 404 });
    }

    // Récupérer l'email du salarié depuis salaries.adresse_mail
    let employee_email: string | null = null;
    if (contract.employee_matricule) {
      try {
        let salQ = sb
          .from('salaries')
          .select('adresse_mail')
          .or(`code_salarie.eq.${contract.employee_matricule},num_salarie.eq.${contract.employee_matricule}`)
          .limit(1);
        if (!isStaff && orgId) salQ = salQ.eq('employer_id', orgId);
        const { data: salData, error: salErr } = await salQ;
        if (!salErr && salData && salData[0]?.adresse_mail) {
          employee_email = salData[0].adresse_mail as string;
        }
      } catch (e) {
        console.warn('Impossible de récupérer adresse_mail depuis salaries:', e);
      }
    }

    return NextResponse.json({ 
      employee_email: employee_email || null
    });

  } catch (error: any) {
    console.error('Erreur:', error);
    return NextResponse.json({ 
      error: 'Erreur lors de la récupération de l\'email', 
      message: error.message 
    }, { status: 500 });
  }
}
