import { NextResponse } from "next/server";
import { createSbServer } from "@/lib/supabaseServer";

async function assertStaff(sb: ReturnType<typeof createSbServer>, userId: string) {
  const { data: me } = await sb
    .from("staff_users")
    .select("is_staff")
    .eq("user_id", userId)
    .maybeSingle();
  return !!me?.is_staff;
}

export async function POST(req: Request) {
  const supabase = createSbServer();
  const { data: { user } } = await supabase.auth.getUser();
  if (!user) return NextResponse.json({ error: "Non authentifié." }, { status: 401 });
  
  const isStaff = await assertStaff(supabase, user.id);
  if (!isStaff) return NextResponse.json({ error: "Accès réservé au staff." }, { status: 403 });

  const body = await req.json().catch(() => ({}));
  const { payslips } = body;

  if (!payslips || !Array.isArray(payslips) || payslips.length === 0) {
    return NextResponse.json({ error: "Aucune paie fournie" }, { status: 400 });
  }

  console.log(`📊 Création en masse de ${payslips.length} paies...`);

  const results = [];
  const errors = [];

  for (const payslipData of payslips) {
    try {
      if (!payslipData.contract_id) {
        errors.push({ 
          contract_id: payslipData.contract_id, 
          error: "ID du contrat manquant" 
        });
        continue;
      }

      // Récupérer les informations du contrat pour obtenir l'organization_id
      const { data: contract, error: contractError } = await supabase
        .from("cddu_contracts")
        .select("org_id")
        .eq("id", payslipData.contract_id)
        .single();

      if (contractError || !contract) {
        console.error(`❌ Erreur récupération contrat ${payslipData.contract_id}:`, contractError);
        errors.push({ 
          contract_id: payslipData.contract_id, 
          error: "Contrat non trouvé" 
        });
        continue;
      }

      // Ajouter l'organization_id aux données
      const fullPayslipData = {
        ...payslipData,
        organization_id: contract.org_id
      };

      // Créer la paie
      const { data: payslip, error: insertError } = await supabase
        .from("payslips")
        .insert([fullPayslipData])
        .select("*")
        .single();

      if (insertError) {
        console.error(`❌ Erreur création payslip pour contrat ${payslipData.contract_id}:`, insertError);
        errors.push({ 
          contract_id: payslipData.contract_id, 
          error: insertError.message 
        });
        continue;
      }

      console.log(`✅ Paie créée pour contrat ${payslipData.contract_id}`);
      results.push(payslip);
    } catch (error) {
      console.error(`❌ Erreur lors de la création de la paie:`, error);
      errors.push({ 
        contract_id: payslipData.contract_id, 
        error: error instanceof Error ? error.message : 'Erreur inconnue' 
      });
    }
  }

  console.log(`📊 Résultat: ${results.length} paies créées, ${errors.length} erreurs`);

  return NextResponse.json({ 
    created: results.length,
    errors: errors.length > 0 ? errors : undefined,
    payslips: results
  });
}
