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

export async function GET(
  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 autorisé" },
        { status: 401 }
      );
    }

    // Vérification des droits staff
    const { data: me } = await sb
      .from("staff_users")
      .select("is_staff")
      .eq("user_id", user.id)
      .maybeSingle();

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

    // Récupération du contrat et de sa clé S3
    const { data: contract, error: contractError } = await sb
      .from("cddu_contracts")
      .select("id, contract_pdf_s3_key")
      .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é disponible", hasSignedPdf: false },
        { status: 404 }
      );
    }

    // Génération de l'URL pré-signée
    const signedUrl = await getS3SignedUrlIfExists(contract.contract_pdf_s3_key, 3600);
    
    if (!signedUrl) {
      return NextResponse.json(
        { error: "Contrat signé non trouvé dans le stockage", hasSignedPdf: false },
        { status: 404 }
      );
    }

    return NextResponse.json({
      signedUrl,
      hasSignedPdf: true,
      s3Key: contract.contract_pdf_s3_key
    });

  } catch (error) {
    console.error("Erreur lors de la génération de l'URL pré-signée:", error);
    return NextResponse.json(
      { error: "Erreur interne du serveur" },
      { status: 500 }
    );
  }
}