import { NextResponse } from "next/server";
import { createClient } from "@supabase/supabase-js";

/**
 * Endpoint de création d'un utilisateur de test avec mot de passe
 * ATTENTION: À utiliser uniquement en développement !
 */
export async function POST(req: Request) {
  // Sécurité: ne fonctionner qu'en développement
  if (process.env.NODE_ENV !== "development") {
    return NextResponse.json({ error: "Endpoint disponible uniquement en développement" }, { status: 403 });
  }

  try {
    const { email, password, isStaff = false } = await req.json();
    
    if (!email || !password) {
      return NextResponse.json({ error: "Email et mot de passe requis" }, { status: 400 });
    }

    // Validation stricte du mot de passe
    const passwordValidation = {
      minLength: password.length >= 12,
      hasLowercase: /[a-z]/.test(password),
      hasUppercase: /[A-Z]/.test(password),
      hasNumber: /\d/.test(password),
      hasSpecialChar: /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password),
    };

    const failedCriteria = [];
    if (!passwordValidation.minLength) failedCriteria.push("au moins 12 caractères");
    if (!passwordValidation.hasLowercase) failedCriteria.push("une minuscule");
    if (!passwordValidation.hasUppercase) failedCriteria.push("une majuscule");
    if (!passwordValidation.hasNumber) failedCriteria.push("un chiffre");
    if (!passwordValidation.hasSpecialChar) failedCriteria.push("un caractère spécial");

    if (failedCriteria.length > 0) {
      return NextResponse.json({ 
        error: `Le mot de passe doit contenir : ${failedCriteria.join(", ")}.`
      }, { status: 400 });
    }

    const url = process.env.SUPABASE_URL!;
    const serviceKey = process.env.SUPABASE_SERVICE_ROLE_KEY!;
    
    if (!url || !serviceKey) {
      return NextResponse.json({ error: "Configuration Supabase manquante" }, { status: 500 });
    }

    const admin = createClient(url, serviceKey);

    // Créer l'utilisateur avec l'admin API
    const { data: userData, error: createError } = await admin.auth.admin.createUser({
      email,
      password,
      email_confirm: true, // Auto-confirmer l'email
      user_metadata: {
        hasPassword: true,
        is_staff: isStaff,
        role: isStaff ? 'staff' : 'user'
      }
    });

    if (createError) {
      return NextResponse.json({ 
        error: "Erreur création utilisateur", 
        details: createError.message 
      }, { status: 400 });
    }

    const userId = userData.user.id;

    // Si staff, ajouter à la table staff_users
    if (isStaff) {
      const { error: staffError } = await admin
        .from('staff_users')
        .insert({ user_id: userId, is_staff: true });

      if (staffError) {
        console.warn("Erreur ajout staff_users:", staffError.message);
      }
    }

    return NextResponse.json({ 
      success: true, 
      user: {
        id: userId,
        email: userData.user.email,
        isStaff,
        hasPassword: true
      }
    });

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