import { NextRequest, NextResponse } from "next/server";
import { createSbServiceRole } from "@/lib/supabaseServer";

export const dynamic = "force-dynamic";

/**
 * POST /api/staff/contracts/[id]/cancel
 * 
 * Annule un contrat de travail (marque comme annulé sans supprimer l'enregistrement)
 * - Met etat_de_la_demande à "Annulée"
 * - Met etat_de_la_paie à "Non concernée"
 * - Met dpae à "Non concernée"
 * - Conserve toutes les données historiques
 */
export async function POST(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const { id } = await params;

    console.log(`🚫 [CANCEL CONTRACT] Début annulation contrat ID: ${id}`);

    const supabase = createSbServiceRole();

    // 1. Vérifier que le contrat existe
    const { data: contract, error: contractError } = await supabase
      .from("cddu_contracts")
      .select("id, contract_number, employee_name, etat_de_la_demande, org_id")
      .eq("id", id)
      .maybeSingle();

    if (contractError || !contract) {
      console.error("❌ [CANCEL CONTRACT] Contrat non trouvé:", contractError);
      return NextResponse.json(
        { error: "Contrat non trouvé" },
        { status: 404 }
      );
    }

    console.log(`📋 [CANCEL CONTRACT] Contrat trouvé:`, {
      id: contract.id,
      contract_number: contract.contract_number,
      employee_name: contract.employee_name,
      etat_actuel: contract.etat_de_la_demande,
    });

    // 2. Vérifier que le contrat n'est pas déjà annulé
    if (contract.etat_de_la_demande === "Annulée") {
      return NextResponse.json(
        { error: "Ce contrat est déjà annulé" },
        { status: 400 }
      );
    }

    // 3. Mettre à jour le contrat avec les nouveaux statuts
    const { error: updateError } = await supabase
      .from("cddu_contracts")
      .update({
        etat_de_la_demande: "Annulée",
        etat_de_la_paie: "Non concernée",
        dpae: "Non concernée",
      })
      .eq("id", id);

    if (updateError) {
      console.error("❌ [CANCEL CONTRACT] Erreur mise à jour:", updateError);
      return NextResponse.json(
        { error: "Erreur lors de l'annulation du contrat" },
        { status: 500 }
      );
    }

    console.log("✅ [CANCEL CONTRACT] Contrat annulé avec succès");

    return NextResponse.json({
      success: true,
      message: "Contrat annulé avec succès",
      contractId: id,
      updates: {
        etat_de_la_demande: "Annulée",
        etat_de_la_paie: "Non concernée",
        dpae: "Non concernée",
      },
    });
  } catch (error: any) {
    console.error("❌ [CANCEL CONTRACT] Erreur:", error);
    return NextResponse.json(
      { error: "Erreur serveur", details: error.message },
      { status: 500 }
    );
  }
}
