<?php
/**
 * OUTIL DE MODIFICATION UTILISATEUR
 * ================================
 * Permet de modifier directement un utilisateur sans passer par l'interface web
 * 
 * USAGE:
 * php fix_user.php <user_id> <nom> <email> <role>
 * 
 * EXEMPLE:
 * php fix_user.php 3 "Nouveau Nom" "newemail@test.com" technicien
 * php fix_user.php 4 "Wil Zahui" "wil.zahui@gmail.com" technicien --password admin123
 */

require __DIR__ . '/app/Core/Database.php';
use App\Core\Database;

echo "=== OUTIL DE MODIFICATION UTILISATEUR ===\n\n";

// Vérifier les arguments
if (count($argv) < 2) {
    echo "Usage: php fix_user.php <user_id> [--list] [--set-name NAME] [--set-email EMAIL] [--set-role ROLE] [--set-active 0|1] [--set-password PASS]\n\n";
    echo "Exemples:\n";
    echo "  php fix_user.php --list                    # Lister tous les utilisateurs\n";
    echo "  php fix_user.php 3 --set-name 'Nouveau'    # Modifier le nom de l'user 3\n";
    echo "  php fix_user.php 3 --set-password admin99  # Changer le mot de passe\n";
    echo "  php fix_user.php 4 --set-role agent        # Changer le rôle à agent\n";
    exit(1);
}

try {
    $pdo = Database::pdo();
    
    // Mode liste
    if ($argv[1] === '--list') {
        echo "Liste des utilisateurs:\n";
        echo str_repeat("=", 90) . "\n";
        $stmt = $pdo->query("SELECT id, name, email, role_key, active FROM users ORDER BY id");
        $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        foreach ($users as $u) {
            printf("ID:%-2d | %-25s | %-35s | %-12s | Active:%d\n", 
                   $u['id'], $u['name'], $u['email'], $u['role_key'], $u['active']);
        }
        exit(0);
    }
    
    $userId = (int)$argv[1];
    
    // Vérifier que l'utilisateur existe
    $checkStmt = $pdo->prepare("SELECT id, name, email, role_key, active FROM users WHERE id = ?");
    $checkStmt->execute([$userId]);
    $user = $checkStmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$user) {
        echo "❌ Utilisateur non trouvé (ID: $userId)\n";
        exit(1);
    }
    
    echo "Utilisateur actuel:\n";
    printf("  ID:       %d\n", $user['id']);
    printf("  Nom:      %s\n", $user['name']);
    printf("  Email:    %s\n", $user['email']);
    printf("  Rôle:     %s\n", $user['role_key']);
    printf("  Actif:    %s\n\n", $user['active'] ? 'Oui' : 'Non');
    
    // Traiter les modifications
    $updates = [];
    $params = [];
    $hasChanges = false;
    
    for ($i = 2; $i < count($argv); $i += 2) {
        $option = $argv[$i];
        $value = $argv[$i + 1] ?? null;
        
        if ($value === null) continue;
        
        switch ($option) {
            case '--set-name':
                $updates[] = "name = ?";
                $params[] = $value;
                echo "✓ Nom changera de '{$user['name']}' à '{$value}'\n";
                $hasChanges = true;
                break;
                
            case '--set-email':
                // Vérifier que l'email n'existe pas
                $emailCheck = $pdo->prepare("SELECT id FROM users WHERE email = ? AND id != ?");
                $emailCheck->execute([$value, $userId]);
                if ($emailCheck->fetch()) {
                    echo "❌ Erreur: Cet email est déjà utilisé\n";
                    exit(1);
                }
                $updates[] = "email = ?";
                $params[] = $value;
                echo "✓ Email changera de '{$user['email']}' à '{$value}'\n";
                $hasChanges = true;
                break;
                
            case '--set-role':
                if (!in_array($value, ['agent', 'technicien', 'superviseur', 'manager', 'admin'])) {
                    echo "❌ Rôle invalide. Rôles: agent, technicien, superviseur, manager, admin\n";
                    exit(1);
                }
                $updates[] = "role_key = ?";
                $params[] = $value;
                echo "✓ Rôle changera de '{$user['role_key']}' à '{$value}'\n";
                $hasChanges = true;
                break;
                
            case '--set-active':
                $activeValue = (int)$value;
                if (!in_array($activeValue, [0, 1])) {
                    echo "❌ Valeur invalide pour active. Utilisez 0 ou 1\n";
                    exit(1);
                }
                $updates[] = "active = ?";
                $params[] = $activeValue;
                echo "✓ Compte sera " . ($activeValue ? "activé" : "désactivé") . "\n";
                $hasChanges = true;
                break;
                
            case '--set-password':
                $updates[] = "password = ?";
                $params[] = password_hash($value, PASSWORD_DEFAULT);
                echo "✓ Mot de passe sera changé\n";
                $hasChanges = true;
                break;
        }
    }
    
    if (!$hasChanges) {
        echo "⚠ Aucune modification spécifiée\n";
        exit(0);
    }
    
    // Effectuer la modification
    echo "\n";
    $params[] = $userId;
    $query = "UPDATE users SET " . implode(", ", $updates) . " WHERE id = ?";
    
    $stmt = $pdo->prepare($query);
    $result = $stmt->execute($params);
    
    if ($result) {
        echo "✅ Modification réussie!\n";
        
        // Afficher le nouvel état
        echo "\nNouvel état:\n";
        $checkStmt->execute([$userId]);
        $updatedUser = $checkStmt->fetch(PDO::FETCH_ASSOC);
        printf("  ID:       %d\n", $updatedUser['id']);
        printf("  Nom:      %s\n", $updatedUser['name']);
        printf("  Email:    %s\n", $updatedUser['email']);
        printf("  Rôle:     %s\n", $updatedUser['role_key']);
        printf("  Actif:    %s\n", $updatedUser['active'] ? 'Oui' : 'Non');
    } else {
        echo "❌ Erreur lors de la modification\n";
        print_r($stmt->errorInfo());
        exit(1);
    }
    
} catch (Exception $e) {
    echo "❌ Erreur: " . $e->getMessage() . "\n";
    exit(1);
}
?>
