// app/api/staff/contrats/[id]/delete-signed-pdf/route.ts
import { NextRequest, NextResponse } from "next/server";
import { createSbServer } from "@/lib/supabaseServer";
import { S3Client, DeleteObjectCommand } from "@aws-sdk/client-s3";

const REGION = process.env.AWS_REGION || "eu-west-3";
const BUCKET = (process.env.AWS_S3_BUCKET || "odentas-docs").trim();

const s3Client = new S3Client({
  region: REGION,
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
  },
});

export async function DELETE(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const sb = createSbServer();

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

    // Vérification de l'accès staff
    const { data: staffUser } = await sb
      .from("staff_users")
      .select("is_staff")
      .eq("user_id", user.id)
      .maybeSingle();

    if (!staffUser?.is_staff) {
      return NextResponse.json(
        { error: "Accès refusé - staff uniquement" },
        { status: 403 }
      );
    }

    // Récupération du contrat
    const { data: contract, error: contractError } = await sb
      .from("cddu_contracts")
      .select("id, contract_pdf_s3_key, contract_number")
      .eq("id", params.id)
      .single();

    if (contractError || !contract) {
      return NextResponse.json(
        { error: "Contrat introuvable" },
        { status: 404 }
      );
    }

    // Vérification de la présence de la clé S3
    if (!contract.contract_pdf_s3_key) {
      return NextResponse.json(
        { error: "Aucun contrat signé à supprimer" },
        { status: 404 }
      );
    }

    console.log("🗑️ Suppression du contrat signé:", {
      contractId: contract.id,
      contractNumber: contract.contract_number,
      s3Key: contract.contract_pdf_s3_key,
    });

    // Suppression du fichier dans S3
    try {
      const deleteCommand = new DeleteObjectCommand({
        Bucket: BUCKET,
        Key: contract.contract_pdf_s3_key,
      });

      await s3Client.send(deleteCommand);
      console.log("✅ Fichier supprimé de S3:", contract.contract_pdf_s3_key);
    } catch (s3Error) {
      console.error("❌ Erreur lors de la suppression S3:", s3Error);
      return NextResponse.json(
        { error: "Erreur lors de la suppression du fichier" },
        { status: 500 }
      );
    }

    // Mise à jour du contrat (retrait de la clé S3 et du statut signé)
    const { error: updateError } = await sb
      .from("cddu_contracts")
      .update({ 
        contract_pdf_s3_key: null,
        contrat_signe: null, // Remettre à null au lieu de "Non"
      })
      .eq("id", contract.id);

    if (updateError) {
      console.error("❌ Erreur lors de la mise à jour du contrat:", updateError);
      return NextResponse.json(
        { error: "Erreur lors de la mise à jour du contrat" },
        { status: 500 }
      );
    }

    console.log("✅ Contrat mis à jour, clé S3 retirée:", contract.id);

    return NextResponse.json({
      success: true,
      message: "Contrat signé supprimé avec succès",
    });

  } catch (error) {
    console.error("❌ Erreur lors de la suppression du contrat signé:", error);
    return NextResponse.json(
      { error: "Erreur interne du serveur" },
      { status: 500 }
    );
  }
}
