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

/**
 * POST /api/staff/users/revoke-staff
 * Révoque un utilisateur staff
 * Réservé aux utilisateurs staff existants
 */
export async function POST(req: Request) {
  try {
    const sb = createRouteHandlerClient({ cookies });
    const { data: { user } } = await sb.auth.getUser();
    if (!user) return new NextResponse("Unauthorized", { status: 401 });

    // Vérifier que l'utilisateur courant est staff
    const { data: staff } = await sb
      .from("staff_users")
      .select("is_staff")
      .eq("user_id", user.id)
      .maybeSingle();

    if (!staff?.is_staff) return new NextResponse("Forbidden", { status: 403 });

    // Récupérer les données (supporter à la fois JSON et FormData)
    let targetUserId: string;
    
    const contentType = req.headers.get("content-type") || "";
    if (contentType.includes("application/json")) {
      const body = await req.json();
      targetUserId = String(body.user_id || "").trim();
    } else {
      const formData = await req.formData();
      targetUserId = String(formData.get("user_id") || "").trim();
    }

    if (!targetUserId) {
      return NextResponse.json({ error: "user_id requis" }, { status: 400 });
    }

    // Empêcher l'auto-révocation
    if (targetUserId === user.id) {
      return NextResponse.json({ 
        error: "Vous ne pouvez pas révoquer votre propre compte" 
      }, { status: 400 });
    }

    // Créer le client admin
    const admin = createClient(
      process.env.NEXT_PUBLIC_SUPABASE_URL!,
      process.env.SUPABASE_SERVICE_ROLE_KEY!,
      { auth: { autoRefreshToken: false, persistSession: false } }
    );

    // Vérifier si l'utilisateur ciblé est super_staff
    const { data: targetStaff } = await admin
      .from("staff_users")
      .select("super_staff")
      .eq("user_id", targetUserId)
      .maybeSingle();

    if (targetStaff?.super_staff) {
      return NextResponse.json({ 
        error: "Les utilisateurs Super Staff ne peuvent pas être révoqués" 
      }, { status: 403 });
    }

    // Retirer le statut staff
    const { error: revokeError } = await admin
      .from("staff_users")
      .update({ is_staff: false })
      .eq("user_id", targetUserId);

    if (revokeError) {
      console.error("Erreur révocation staff:", revokeError);
      return NextResponse.json({ 
        error: "Erreur lors de la révocation", 
        message: revokeError.message 
      }, { status: 400 });
    }

    // Rediriger si c'est une requête HTML
    const accept = req.headers.get("accept") || "";
    if (accept.includes("text/html")) {
      return NextResponse.redirect(new URL("/staff/utilisateurs", req.url), { status: 303 });
    }

    return NextResponse.json({
      success: true,
      message: "Utilisateur staff révoqué avec succès"
    });

  } catch (e: any) {
    console.error("Erreur revoke-staff:", e);
    return NextResponse.json({ 
      error: "Erreur serveur", 
      message: e?.message || "Erreur interne" 
    }, { status: 500 });
  }
}
