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

export const dynamic = "force-dynamic";

/**
 * POST /api/staff/amendments/[id]/update-signature-status
 * 
 * Met à jour manuellement le statut de signature d'un avenant
 * Action staff uniquement pour corriger ou forcer un statut de signature
 */
export async function POST(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const { id } = await params;
    const body = await request.json();
    const { signature_status } = body;

    console.log(`🔄 [UPDATE SIGNATURE STATUS] Avenant ID: ${id}, Nouveau statut: ${signature_status}`);

    // Validation du statut
    const validStatuses = ["not_sent", "pending_employer", "pending_employee", "signed"];
    if (!signature_status || !validStatuses.includes(signature_status)) {
      return NextResponse.json(
        { error: "Statut de signature invalide. Valeurs acceptées: " + validStatuses.join(", ") },
        { status: 400 }
      );
    }

    const supabase = createSbServiceRole();

    // Vérifier que l'avenant existe
    const { data: avenant, error: avenantError } = await supabase
      .from("avenants")
      .select("id, numero_avenant, signature_status, contract_id")
      .eq("id", id)
      .maybeSingle();

    if (avenantError || !avenant) {
      console.error("❌ [UPDATE SIGNATURE STATUS] Avenant non trouvé:", avenantError);
      return NextResponse.json(
        { error: "Avenant non trouvé" },
        { status: 404 }
      );
    }

    console.log(`📋 [UPDATE SIGNATURE STATUS] Statut actuel: ${avenant.signature_status} → Nouveau: ${signature_status}`);

    // Mettre à jour l'avenant avec le nouveau statut de signature
    const { error: updateError } = await supabase
      .from("avenants")
      .update({ signature_status })
      .eq("id", id);

    if (updateError) {
      console.error("❌ [UPDATE SIGNATURE STATUS] Erreur mise à jour:", updateError);
      return NextResponse.json(
        { error: "Erreur lors de la mise à jour du statut" },
        { status: 500 }
      );
    }

    console.log("✅ [UPDATE SIGNATURE STATUS] Statut mis à jour avec succès");

    // Si on passe à "signed", mettre à jour aussi le contrat associé
    if (signature_status === "signed" && avenant.contract_id) {
      console.log("🔄 [UPDATE SIGNATURE STATUS] Mise à jour du contrat associé");
      
      const { error: contractError } = await supabase
        .from("cddu_contracts")
        .update({
          avenant_signe: true,
          avenant_signe_date: new Date().toISOString(),
        })
        .eq("id", avenant.contract_id);

      if (contractError) {
        console.error("⚠️ [UPDATE SIGNATURE STATUS] Erreur mise à jour contrat:", contractError);
        // Ne pas bloquer le flux, l'avenant a été mis à jour
      } else {
        console.log("✅ [UPDATE SIGNATURE STATUS] Contrat marqué comme avenant signé");
      }
    }

    // Si on repasse à un statut non-signé, mettre à jour le contrat
    if (signature_status !== "signed" && avenant.signature_status === "signed" && avenant.contract_id) {
      console.log("🔄 [UPDATE SIGNATURE STATUS] Retrait du marqueur avenant signé sur le contrat");
      
      const { error: contractError } = await supabase
        .from("cddu_contracts")
        .update({
          avenant_signe: false,
          avenant_signe_date: null,
        })
        .eq("id", avenant.contract_id);

      if (contractError) {
        console.error("⚠️ [UPDATE SIGNATURE STATUS] Erreur mise à jour contrat:", contractError);
      } else {
        console.log("✅ [UPDATE SIGNATURE STATUS] Marqueur avenant retiré du contrat");
      }
    }

    return NextResponse.json({
      success: true,
      message: "Statut de signature mis à jour",
      avenantId: id,
      newSignatureStatus: signature_status,
    });
  } catch (error: any) {
    console.error("❌ [UPDATE SIGNATURE STATUS] Erreur:", error);
    return NextResponse.json(
      { error: "Erreur serveur", details: error.message },
      { status: 500 }
    );
  }
}
