#!/bin/bash

# =============================================================================
# SCRIPT DE NETTOYAGE CONFIGURATION UNIONFLOW KEYCLOAK
# =============================================================================
# 
# Ce script supprime complètement la configuration UnionFlow de Keycloak :
# - Suppression des 8 comptes de test
# - Suppression des 8 rôles métier
# - Nettoyage complet pour recommencer
#
# ⚠️  ATTENTION : Cette action est irréversible !
#
# Usage : ./cleanup-unionflow-keycloak.sh
# =============================================================================

set -e

# Configuration
KEYCLOAK_URL="http://192.168.1.145:8180"
REALM="unionflow"
ADMIN_USER="admin"
ADMIN_PASSWORD="admin"

# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

# Obtenir le token d'administration
get_admin_token() {
    log_info "Obtention du token d'administration..."
    
    local response=$(curl -s -X POST \
        "${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token" \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "username=${ADMIN_USER}" \
        -d "password=${ADMIN_PASSWORD}" \
        -d "grant_type=password" \
        -d "client_id=admin-cli")
    
    ADMIN_TOKEN=$(echo "$response" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
    
    if [ -n "$ADMIN_TOKEN" ]; then
        log_success "Token d'administration obtenu"
    else
        log_error "Impossible d'obtenir le token d'administration"
        exit 1
    fi
}

# Obtenir l'ID d'un utilisateur
get_user_id() {
    local username="$1"
    local response=$(curl -s -X GET \
        "${KEYCLOAK_URL}/admin/realms/${REALM}/users?username=${username}" \
        -H "Authorization: Bearer ${ADMIN_TOKEN}" \
        -H "Content-Type: application/json")
    
    echo "$response" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4
}

# Supprimer un utilisateur
delete_user() {
    local username="$1"
    
    log_info "Suppression de l'utilisateur: $username"
    
    local user_id=$(get_user_id "$username")
    
    if [ -z "$user_id" ]; then
        log_warning "Utilisateur $username non trouvé"
        return 0
    fi
    
    local response=$(curl -s -X DELETE \
        "${KEYCLOAK_URL}/admin/realms/${REALM}/users/${user_id}" \
        -H "Authorization: Bearer ${ADMIN_TOKEN}" \
        -H "Content-Type: application/json")
    
    if [ $? -eq 0 ]; then
        log_success "Utilisateur $username supprimé"
    else
        log_error "Erreur lors de la suppression de l'utilisateur $username"
    fi
}

# Supprimer un rôle
delete_role() {
    local role_name="$1"
    
    log_info "Suppression du rôle: $role_name"
    
    local response=$(curl -s -X DELETE \
        "${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${role_name}" \
        -H "Authorization: Bearer ${ADMIN_TOKEN}" \
        -H "Content-Type: application/json")
    
    if [ $? -eq 0 ]; then
        log_success "Rôle $role_name supprimé"
    else
        log_warning "Rôle $role_name non trouvé ou déjà supprimé"
    fi
}

# Confirmation de l'utilisateur
confirm_cleanup() {
    echo ""
    echo "============================================================================="
    echo "⚠️  ATTENTION - SUPPRESSION COMPLÈTE DE LA CONFIGURATION UNIONFLOW"
    echo "============================================================================="
    echo ""
    echo "Cette action va supprimer DÉFINITIVEMENT :"
    echo ""
    echo "👥 UTILISATEURS DE TEST :"
    echo "   • superadmin (superadmin@unionflow.dev)"
    echo "   • admin.org (admin@association-dev.fr)"
    echo "   • tech.lead (tech@association-dev.fr)"
    echo "   • tresorier (tresorier@association-dev.fr)"
    echo "   • rh.manager (rh@association-dev.fr)"
    echo "   • marie.active (marie@association-dev.fr)"
    echo "   • jean.simple (jean@association-dev.fr)"
    echo "   • visiteur (visiteur@example.com)"
    echo ""
    echo "🔐 RÔLES MÉTIER :"
    echo "   • SUPER_ADMINISTRATEUR"
    echo "   • ADMINISTRATEUR_ORGANISATION"
    echo "   • RESPONSABLE_TECHNIQUE"
    echo "   • RESPONSABLE_FINANCIER"
    echo "   • RESPONSABLE_MEMBRES"
    echo "   • MEMBRE_ACTIF"
    echo "   • MEMBRE_SIMPLE"
    echo "   • VISITEUR"
    echo ""
    echo "⚠️  Cette action est IRRÉVERSIBLE !"
    echo ""
    
    read -p "Êtes-vous sûr de vouloir continuer ? (tapez 'SUPPRIMER' pour confirmer) : " confirmation
    
    if [ "$confirmation" != "SUPPRIMER" ]; then
        log_info "Opération annulée par l'utilisateur"
        exit 0
    fi
    
    echo ""
    log_warning "Confirmation reçue. Début de la suppression..."
    echo ""
}

# =============================================================================
# EXÉCUTION DU NETTOYAGE
# =============================================================================

echo "============================================================================="
echo "🧹 NETTOYAGE CONFIGURATION UNIONFLOW KEYCLOAK"
echo "============================================================================="

# Demander confirmation
confirm_cleanup

# Obtenir le token d'administration
get_admin_token

echo ""
echo "============================================================================="
echo "👥 SUPPRESSION DES UTILISATEURS DE TEST"
echo "============================================================================="
echo ""

# Supprimer tous les utilisateurs de test
users=("superadmin" "admin.org" "tech.lead" "tresorier" "rh.manager" "marie.active" "jean.simple" "visiteur")

for user in "${users[@]}"; do
    delete_user "$user"
done

echo ""
echo "============================================================================="
echo "🔐 SUPPRESSION DES RÔLES MÉTIER"
echo "============================================================================="
echo ""

# Supprimer tous les rôles (dans l'ordre inverse de la hiérarchie)
roles=("VISITEUR" "MEMBRE_SIMPLE" "MEMBRE_ACTIF" "RESPONSABLE_MEMBRES" "RESPONSABLE_FINANCIER" "RESPONSABLE_TECHNIQUE" "ADMINISTRATEUR_ORGANISATION" "SUPER_ADMINISTRATEUR")

for role in "${roles[@]}"; do
    delete_role "$role"
done

echo ""
echo "============================================================================="
echo "🔍 VÉRIFICATION DU NETTOYAGE"
echo "============================================================================="
echo ""

# Vérifier que les utilisateurs ont été supprimés
log_info "Vérification de la suppression des utilisateurs..."
remaining_users=0

for user in "${users[@]}"; do
    local user_id=$(get_user_id "$user")
    if [ -n "$user_id" ]; then
        log_warning "Utilisateur $user encore présent"
        ((remaining_users++))
    fi
done

if [ $remaining_users -eq 0 ]; then
    log_success "Tous les utilisateurs de test ont été supprimés"
else
    log_warning "$remaining_users utilisateurs n'ont pas pu être supprimés"
fi

# Vérifier que les rôles ont été supprimés
log_info "Vérification de la suppression des rôles..."
remaining_roles=0

for role in "${roles[@]}"; do
    local role_check=$(curl -s -X GET \
        "${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${role}" \
        -H "Authorization: Bearer ${ADMIN_TOKEN}" \
        -H "Content-Type: application/json")
    
    if echo "$role_check" | grep -q '"name"'; then
        log_warning "Rôle $role encore présent"
        ((remaining_roles++))
    fi
done

if [ $remaining_roles -eq 0 ]; then
    log_success "Tous les rôles métier ont été supprimés"
else
    log_warning "$remaining_roles rôles n'ont pas pu être supprimés"
fi

echo ""
echo "============================================================================="
echo "✅ NETTOYAGE TERMINÉ"
echo "============================================================================="
echo ""

if [ $remaining_users -eq 0 ] && [ $remaining_roles -eq 0 ]; then
    log_success "🎉 Nettoyage complet réussi !"
    echo ""
    echo "✅ Tous les utilisateurs de test supprimés"
    echo "✅ Tous les rôles métier supprimés"
    echo "✅ Configuration UnionFlow complètement nettoyée"
    echo ""
    echo "🚀 Vous pouvez maintenant relancer setup-unionflow-keycloak.sh"
else
    log_warning "⚠️  Nettoyage partiel"
    echo ""
    echo "Éléments restants :"
    echo "   • Utilisateurs : $remaining_users"
    echo "   • Rôles : $remaining_roles"
    echo ""
    echo "🔧 Vous pouvez relancer ce script ou supprimer manuellement via l'interface Keycloak"
fi

echo ""
echo "============================================================================="
