#!/usr/bin/env php
<?php
/**
 * Script de test pour la création d'utilisateurs
 * Teste les différents cas qui peuvent causer une erreur 400
 */

// Configuration
$apiUrl = 'http://localhost/api';
$sessionId = ''; // À remplir avec un session_id valide

// Couleurs pour la sortie
$red = "\033[31m";
$green = "\033[32m";
$yellow = "\033[33m";
$blue = "\033[34m";
$reset = "\033[0m";

function testRequest($endpoint, $method, $data = null, $sessionId = '') {
    $ch = curl_init($endpoint);
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    
    if ($sessionId) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $sessionId
        ]);
    } else {
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    }
    
    if ($data) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    }
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    return [
        'code' => $httpCode,
        'body' => json_decode($response, true) ?: $response
    ];
}

echo $blue . "=== Test de création d'utilisateur et vérification username ===" . $reset . "\n\n";

// Test 1: Vérification username sans données
echo $yellow . "Test 1: POST /api/users/check-username sans données" . $reset . "\n";
$result = testRequest($apiUrl . '/users/check-username', 'POST', [], $sessionId);
echo "Code HTTP: " . ($result['code'] == 400 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Field: " . ($result['body']['field'] ?? 'non spécifié') . "\n";
}
echo "\n";

// Test 2: Vérification username avec format invalide (trop court)
echo $yellow . "Test 2: POST /api/users/check-username avec username trop court" . $reset . "\n";
$result = testRequest($apiUrl . '/users/check-username', 'POST', ['username' => 'abc'], $sessionId);
echo "Code HTTP: " . ($result['code'] == 400 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Format attendu: " . ($result['body']['format'] ?? 'non spécifié') . "\n";
}
echo "\n";

// Test 3: Vérification username avec format invalide (commence par un chiffre)
echo $yellow . "Test 3: POST /api/users/check-username avec username commençant par un chiffre" . $reset . "\n";
$result = testRequest($apiUrl . '/users/check-username', 'POST', ['username' => '123test.user'], $sessionId);
echo "Code HTTP: " . ($result['code'] == 400 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Valeur testée: " . ($result['body']['value'] ?? 'non spécifié') . "\n";
}
echo "\n";

// Test 4: Vérification username valide
echo $yellow . "Test 4: POST /api/users/check-username avec username valide" . $reset . "\n";
$result = testRequest($apiUrl . '/users/check-username', 'POST', ['username' => 'test.user123'], $sessionId);
echo "Code HTTP: " . ($result['code'] == 200 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Disponible: " . ($result['body']['available'] ? 'Oui' : 'Non') . "\n";
    echo "Message: " . $result['body']['message'] . "\n";
}
echo "\n";

// Test 5: Création utilisateur sans email
echo $yellow . "Test 5: POST /api/users sans email" . $reset . "\n";
$result = testRequest($apiUrl . '/users', 'POST', [
    'name' => 'Test User',
    'fk_entite' => 1
], $sessionId);
echo "Code HTTP: " . ($result['code'] == 400 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Field: " . ($result['body']['field'] ?? 'non spécifié') . "\n";
}
echo "\n";

// Test 6: Création utilisateur sans nom
echo $yellow . "Test 6: POST /api/users sans nom" . $reset . "\n";
$result = testRequest($apiUrl . '/users', 'POST', [
    'email' => 'test@example.com',
    'fk_entite' => 1
], $sessionId);
echo "Code HTTP: " . ($result['code'] == 400 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Field: " . ($result['body']['field'] ?? 'non spécifié') . "\n";
}
echo "\n";

// Test 7: Création utilisateur avec email invalide
echo $yellow . "Test 7: POST /api/users avec email invalide" . $reset . "\n";
$result = testRequest($apiUrl . '/users', 'POST', [
    'email' => 'invalid-email',
    'name' => 'Test User',
    'fk_entite' => 1
], $sessionId);
echo "Code HTTP: " . ($result['code'] == 400 ? $green : $red) . $result['code'] . $reset . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Field: " . ($result['body']['field'] ?? 'non spécifié') . "\n";
    echo "Valeur testée: " . ($result['body']['value'] ?? 'non spécifié') . "\n";
}
echo "\n";

// Test 8: Création utilisateur pour entité avec username manuel mais sans username
echo $yellow . "Test 8: POST /api/users pour entité avec chk_username_manuel=1 sans username" . $reset . "\n";
$result = testRequest($apiUrl . '/users', 'POST', [
    'email' => 'test@example.com',
    'name' => 'Test User',
    'fk_entite' => 5  // Supposons que l'entité 5 a chk_username_manuel=1
], $sessionId);
echo "Code HTTP: " . $result['code'] . "\n";
if (is_array($result['body'])) {
    echo "Message: " . $result['body']['message'] . "\n";
    echo "Field: " . ($result['body']['field'] ?? 'non spécifié') . "\n";
    echo "Reason: " . ($result['body']['reason'] ?? 'non spécifié') . "\n";
}
echo "\n";

echo $blue . "=== Fin des tests ===" . $reset . "\n";
echo "\nRappel: Pour que ces tests fonctionnent, vous devez:\n";
echo "1. Avoir un serveur local en cours d'exécution\n";
echo "2. Remplir la variable \$sessionId avec un token de session valide\n";
echo "3. Vérifier les logs dans /logs/ pour voir les détails\n";