import { NextResponse } from "next/server";
import { cookies } from "next/headers";
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
import QRCode from "qrcode";

export async function POST() {
  try {
    const supabase = createRouteHandlerClient({ cookies });
    const { data: { session } } = await supabase.auth.getSession();
    
    if (!session?.user) {
      return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
    }

    // Vérifier les facteurs existants
    const { data: factors } = await supabase.auth.mfa.listFactors();
    
    // Vérifier si l'utilisateur a déjà un facteur vérifié (2FA activé)
    const verifiedFactors = factors?.totp?.filter(factor => factor.status === "verified") || [];
    if (verifiedFactors.length > 0) {
      return NextResponse.json({ error: "2FA déjà activé" }, { status: 400 });
    }

    // Nettoyer les facteurs non vérifiés s'il y en a (facteurs incomplets)
    const unverifiedFactors = factors?.totp?.filter(factor => factor.status !== "verified") || [];
    for (const factor of unverifiedFactors) {
      try {
        await supabase.auth.mfa.unenroll({ factorId: factor.id });
        console.log(`Facteur incomplet supprimé: ${factor.id}`);
      } catch (cleanupError) {
        console.warn(`Erreur lors du nettoyage du facteur ${factor.id}:`, cleanupError);
        // Continue même si le nettoyage échoue
      }
    }

    // Créer un nouveau facteur TOTP
    const { data: enrollData, error: enrollError } = await supabase.auth.mfa.enroll({
      factorType: "totp",
    });

    if (enrollError) {
      console.error("Erreur lors de l'enrôlement 2FA:", enrollError);
      return NextResponse.json({ error: "Échec de l'enrôlement 2FA" }, { status: 500 });
    }

    if (!enrollData?.totp?.qr_code) {
      return NextResponse.json({ error: "QR code non généré" }, { status: 500 });
    }

    // Générer le QR code en format data URL pour l'affichage
    const qrCodeDataUrl = await QRCode.toDataURL(enrollData.totp.uri);

    return NextResponse.json({
      success: true,
      factorId: enrollData.id,
      secret: enrollData.totp.secret,
      qrCode: qrCodeDataUrl,
      uri: enrollData.totp.uri,
    });

  } catch (error: any) {
    console.error("Erreur API enroll 2FA:", error);
    return NextResponse.json({ error: "Erreur interne du serveur" }, { status: 500 });
  }
}