#!/bin/bash

# Script pour configurer l'accès à la base de données des adresses
# avec segmentation par environnement basée sur les plages d'IPs

echo "Configuration de l'accès à la base de données des adresses"
echo "=========================================================="
echo ""
echo "Architecture des IPs par environnement :"
echo "- DÉVELOPPEMENT : 13.23.33.40-49 (13.23.33.4%)"
echo "- RECETTE       : 13.23.33.30-39 (13.23.33.3%)"
echo "- PRODUCTION    : 13.23.33.20-29 (13.23.33.2%)"
echo ""

# Fonction pour créer l'utilisateur sur un container
create_user_on_container() {
    local container=$1
    local ip_pattern=$2
    local env_name=$3
    
    echo ""
    echo "Configuration pour $env_name ($container)..."
    echo "Pattern IP autorisé : $ip_pattern"
    
    # Se connecter au container MariaDB et créer l'utilisateur
    incus exec $container -- mysql -u root -p -e "
    -- Créer l'utilisateur pour l'accès depuis la plage IP de l'environnement
    CREATE USER IF NOT EXISTS 'adresses_user'@'$ip_pattern' IDENTIFIED BY 'd66,AdrGeo.User';
    GRANT SELECT ON adresses.* TO 'adresses_user'@'$ip_pattern';
    
    -- Créer aussi un utilisateur localhost pour les tests directs
    CREATE USER IF NOT EXISTS 'adresses_user'@'localhost' IDENTIFIED BY 'd66,AdrGeo.User';
    GRANT SELECT ON adresses.* TO 'adresses_user'@'localhost';
    
    FLUSH PRIVILEGES;
    
    -- Vérifier
    SELECT user, host FROM mysql.user WHERE user = 'adresses_user' ORDER BY host;
    "
    
    if [ $? -eq 0 ]; then
        echo "✓ Utilisateur créé sur $container"
    else
        echo "✗ Erreur lors de la création sur $container"
    fi
}

# Fonction pour tester la connexion
test_connection() {
    local api_container=$1
    local maria_ip=$2
    local env_name=$3
    
    echo ""
    echo "Test de connexion $env_name : $api_container -> $maria_ip..."
    
    incus exec $api_container -- mysql -h $maria_ip -u adresses_user -p'd66,AdrGeo.User' -e "
    SELECT CONCAT('Connexion réussie depuis ', @@hostname, ' vers ', '$maria_ip') as Status;
    SELECT DATABASE();
    SHOW TABLES FROM adresses LIMIT 3;
    " 2>/dev/null
    
    if [ $? -eq 0 ]; then
        echo "✓ Connexion réussie!"
    else
        echo "✗ Échec de la connexion"
    fi
}

# Menu de sélection
echo ""
echo "Que voulez-vous configurer ?"
echo "1. Environnement DÉVELOPPEMENT uniquement (dva-maria)"
echo "2. Environnement RECETTE uniquement (rca-maria)"
echo "3. Environnement PRODUCTION uniquement (pra-maria)"
echo "4. Tous les environnements"
echo ""
read -p "Votre choix (1-4): " choice

case $choice in
    1)
        create_user_on_container "dva-maria" "13.23.33.4%" "DÉVELOPPEMENT"
        ;;
    2)
        create_user_on_container "rca-maria" "13.23.33.3%" "RECETTE"
        ;;
    3)
        create_user_on_container "pra-maria" "13.23.33.2%" "PRODUCTION"
        ;;
    4)
        create_user_on_container "dva-maria" "13.23.33.4%" "DÉVELOPPEMENT"
        create_user_on_container "rca-maria" "13.23.33.3%" "RECETTE"
        create_user_on_container "pra-maria" "13.23.33.2%" "PRODUCTION"
        ;;
    *)
        echo "Choix invalide"
        exit 1
        ;;
esac

# Tests de connexion
echo ""
echo "=========================================================="
echo "Tests de connexion"
echo "=========================================================="

read -p "Voulez-vous tester les connexions? (o/n): " test_choice
if [ "$test_choice" = "o" ]; then
    case $choice in
        1)
            test_connection "dva-api" "13.23.33.46" "DÉVELOPPEMENT"
            ;;
        2)
            test_connection "rca-api" "13.23.33.36" "RECETTE"
            ;;
        3)
            test_connection "pra-api" "13.23.33.26" "PRODUCTION"
            ;;
        4)
            test_connection "dva-api" "13.23.33.46" "DÉVELOPPEMENT"
            test_connection "rca-api" "13.23.33.36" "RECETTE"
            test_connection "pra-api" "13.23.33.26" "PRODUCTION"
            ;;
    esac
fi

echo ""
echo "Configuration terminée!"
echo ""
echo "Récapitulatif de la sécurité mise en place :"
echo "- Chaque environnement a sa propre plage d'IPs autorisée"
echo "- DÉVELOPPEMENT : seuls les containers en 13.23.33.4x peuvent accéder à dva-maria"
echo "- RECETTE : seuls les containers en 13.23.33.3x peuvent accéder à rca-maria"
echo "- PRODUCTION : seuls les containers en 13.23.33.2x peuvent accéder à pra-maria"
echo ""
echo "Cela empêche un container de DEV d'accéder aux données de PROD par exemple."