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 GET(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 { searchParams } = new URL(req.url);
  const contractId = searchParams.get('contract_id');

  if (!contractId) {
    return NextResponse.json({ error: "contract_id manquant" }, { status: 400 });
  }

  const { data: payslips, error } = await supabase
    .from("payslips")
    .select("*")
    .eq("contract_id", contractId)
    .order("pay_number", { ascending: true });

  if (error) {
    console.error('Erreur récupération payslips:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }

  return NextResponse.json({ payslips: payslips ?? [] });
}

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(() => ({}));

  console.log("Body reçu pour création payslip:", body);

  // Récupérer les informations du contrat pour obtenir l'organization_id
  if (!body.contract_id) {
    return NextResponse.json({ error: "ID du contrat manquant" }, { status: 400 });
  }

  console.log("Contract ID recherché:", body.contract_id, typeof body.contract_id);

  const { data: contract, error: contractError } = await supabase
    .from("cddu_contracts")
    .select("org_id")
    .eq("id", body.contract_id)
    .single();

  console.log("Résultat recherche contrat:", { contract, contractError });

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

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

  const { data: payslip, error } = await supabase
    .from("payslips")
    .insert([payslipData])
    .select("*")
    .single();

  if (error) {
    console.error("Erreur création payslip:", error);
    return NextResponse.json({ error: error.message }, { status: 400 });
  }

  return NextResponse.json({ payslip });
}