#!/usr/bin/env python3
"""
Test du mapping du rôle SUPER_ADMINISTRATEUR
"""

import requests
import json
import base64

def test_superadmin_role():
    base_url = "http://localhost:8180"
    
    print("🧪 Test du rôle SUPER_ADMINISTRATEUR")
    print("=" * 60)
    print()
    
    # Test avec superadmin@unionflow.com
    email_username = "superadmin@unionflow.com"
    password = "SuperAdmin123!"
    
    print(f"🔐 Authentification de {email_username}")
    
    data = {
        "username": email_username,
        "password": password,
        "grant_type": "password",
        "client_id": "unionflow-mobile"
    }
    
    try:
        response = requests.post(
            f"{base_url}/realms/unionflow/protocol/openid-connect/token",
            data=data,
            headers={"Content-Type": "application/x-www-form-urlencoded"}
        )
        
        print(f"📊 Status: {response.status_code}")
        
        if response.status_code == 200:
            token_data = response.json()
            if "access_token" in token_data:
                print("✅ AUTHENTIFICATION RÉUSSIE !")
                
                # Décoder le token pour voir les rôles
                access_token = token_data['access_token']
                
                # Décoder le payload du JWT
                token_parts = access_token.split('.')
                if len(token_parts) >= 2:
                    # Ajouter du padding si nécessaire
                    payload = token_parts[1]
                    payload += '=' * (4 - len(payload) % 4)
                    decoded = base64.b64decode(payload)
                    token_info = json.loads(decoded)
                    
                    print()
                    print("🎫 INFORMATIONS DU TOKEN :")
                    print(f"   👤 Utilisateur: {token_info.get('preferred_username', 'N/A')}")
                    print(f"   📧 Email: {token_info.get('email', 'N/A')}")
                    print(f"   👨‍💼 Nom: {token_info.get('name', 'N/A')}")
                    
                    # Extraire les rôles
                    roles = []
                    if 'realm_access' in token_info and 'roles' in token_info['realm_access']:
                        all_roles = token_info['realm_access']['roles']
                        # Filtrer les rôles système
                        roles = [r for r in all_roles if not r.startswith('default-') and r not in ['offline_access', 'uma_authorization']]
                    
                    print()
                    print("🎭 RÔLES KEYCLOAK EXTRAITS :")
                    for role in roles:
                        if role == 'SUPER_ADMINISTRATEUR':
                            print(f"   ✅ {role} (SUPER ADMIN - ACCÈS COMPLET)")
                        else:
                            print(f"   ✓ {role}")
                    
                    print()
                    print("🎯 MAPPING VERS L'APPLICATION MOBILE :")
                    
                    if 'SUPER_ADMINISTRATEUR' in roles:
                        print("   ✅ Rôle mappé: UserRole.superAdmin")
                        print("   ✅ Dashboard: SuperAdminDashboard")
                        print("   ✅ Navigation: Command Center")
                        print("   ✅ Permissions: ACCÈS COMPLET SYSTÈME")
                        print()
                        print("🚀 FONCTIONNALITÉS DISPONIBLES :")
                        print("   • Vue globale multi-organisations")
                        print("   • Métriques système en temps réel")
                        print("   • Outils d'administration avancés")
                        print("   • Monitoring et analytics")
                        print("   • Gestion des utilisateurs globale")
                        print("   • Configuration système")
                        print("   • Sécurité et audit")
                        print("   • Sauvegarde et maintenance")
                        print()
                        print("📱 ONGLETS DU DASHBOARD :")
                        print("   1. Vue Globale - Métriques système")
                        print("   2. Organisations - Gestion multi-org")
                        print("   3. Système - Monitoring technique")
                        print("   4. Analytics - Rapports avancés")
                        
                        return True
                    else:
                        print("   ❌ Rôle SUPER_ADMINISTRATEUR non trouvé")
                        print("   ⚠️ L'utilisateur sera mappé comme visiteur")
                        return False
                
            else:
                print("❌ Token manquant dans la réponse")
        else:
            print("❌ Authentification échouée")
            print(f"Response: {response.text}")
        
        return False
        
    except Exception as e:
        print(f"❌ Erreur: {e}")
        return False

def test_all_roles():
    """Teste tous les comptes avec leurs rôles"""
    base_url = "http://localhost:8180"
    
    print()
    print("=" * 60)
    print("🧪 TEST DE TOUS LES RÔLES UNIONFLOW")
    print("=" * 60)
    print()
    
    users = [
        ("superadmin@unionflow.com", "SuperAdmin123!", "SUPER_ADMINISTRATEUR"),
        ("marie.active@unionflow.com", "Marie123!", "MEMBRE_ACTIF"),
        ("jean.simple@unionflow.com", "Jean123!", "MEMBRE_SIMPLE"),
        ("tech.lead@unionflow.com", "TechLead123!", "RESPONSABLE_TECHNIQUE"),
        ("rh.manager@unionflow.com", "RhManager123!", "RESPONSABLE_MEMBRES"),
    ]
    
    for email, password, expected_role in users:
        print(f"🔐 Test de {email} (attendu: {expected_role})")
        
        data = {
            "username": email,
            "password": password,
            "grant_type": "password",
            "client_id": "unionflow-mobile"
        }
        
        try:
            response = requests.post(
                f"{base_url}/realms/unionflow/protocol/openid-connect/token",
                data=data,
                headers={"Content-Type": "application/x-www-form-urlencoded"}
            )
            
            if response.status_code == 200:
                token_data = response.json()
                access_token = token_data['access_token']
                
                # Décoder le token
                token_parts = access_token.split('.')
                payload = token_parts[1]
                payload += '=' * (4 - len(payload) % 4)
                decoded = base64.b64decode(payload)
                token_info = json.loads(decoded)
                
                # Extraire les rôles
                roles = []
                if 'realm_access' in token_info and 'roles' in token_info['realm_access']:
                    all_roles = token_info['realm_access']['roles']
                    roles = [r for r in all_roles if not r.startswith('default-') and r not in ['offline_access', 'uma_authorization']]
                
                if expected_role in roles:
                    print(f"   ✅ Rôle {expected_role} trouvé")
                else:
                    print(f"   ❌ Rôle {expected_role} manquant. Rôles trouvés: {roles}")
                    
            else:
                print(f"   ❌ Authentification échouée: {response.status_code}")
                
        except Exception as e:
            print(f"   ❌ Erreur: {e}")
        
        print()

if __name__ == "__main__":
    success = test_superadmin_role()
    
    if success:
        print()
        print("=" * 60)
        print("🎉 SUPER ADMINISTRATEUR CONFIGURÉ AVEC SUCCÈS !")
        print("=" * 60)
        print()
        print("📱 VOTRE APPLICATION MOBILE AFFICHERA :")
        print("   • Dashboard Super Admin complet")
        print("   • Navigation Command Center")
        print("   • Toutes les fonctionnalités administratives")
        print()
        print("🚀 Testez maintenant sur votre Samsung avec :")
        print("   Username: superadmin@unionflow.com")
        print("   Password: SuperAdmin123!")
    else:
        print()
        print("⚠️ Problème de configuration détecté")
        print("Vérifiez que le rôle SUPER_ADMINISTRATEUR est bien assigné")
    
    # Test de tous les rôles
    test_all_roles()
