#!/bin/bash

# Script pour configurer l'accès à la base de données des adresses
# sur chaque environnement Incus

echo "Configuration de l'accès à la base de données des adresses"
echo "=========================================================="

# Fonction pour créer l'utilisateur sur un container
create_user_on_container() {
    local container=$1
    local api_ip=$2
    local maria_ip=$3
    
    echo ""
    echo "Configuration pour $container..."
    echo "Container MariaDB IP: $maria_ip"
    echo "Container API IP: $api_ip"
    
    # 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 l'API
    CREATE USER IF NOT EXISTS 'adresses_user'@'$api_ip' IDENTIFIED BY 'd66,AdrGeo.User';
    GRANT SELECT ON adresses.* TO 'adresses_user'@'$api_ip';
    
    -- 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';
    
    -- Optionnel : créer un utilisateur pour tout le sous-réseau
    CREATE USER IF NOT EXISTS 'adresses_user'@'13.23.33.%' IDENTIFIED BY 'd66,AdrGeo.User';
    GRANT SELECT ON adresses.* TO 'adresses_user'@'13.23.33.%';
    
    FLUSH PRIVILEGES;
    
    -- Vérifier
    SELECT user, host FROM mysql.user WHERE user = 'adresses_user';
    "
    
    echo "✓ Utilisateur créé sur $container"
}

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

# Configuration pour chaque environnement
echo ""
echo "1. DÉVELOPPEMENT (DVA)"
read -p "IP du container dva-api [par défaut: 13.23.33.45]: " DVA_API_IP
DVA_API_IP=${DVA_API_IP:-13.23.33.45}
create_user_on_container "dva-maria" "$DVA_API_IP" "13.23.33.46"

echo ""
echo "2. RECETTE (RCA)"
read -p "IP du container rca-api [par défaut: 13.23.33.35]: " RCA_API_IP
RCA_API_IP=${RCA_API_IP:-13.23.33.35}
create_user_on_container "rca-maria" "$RCA_API_IP" "13.23.33.36"

echo ""
echo "3. PRODUCTION (PRA)"
read -p "IP du container pra-api [par défaut: 13.23.33.25]: " PRA_API_IP
PRA_API_IP=${PRA_API_IP:-13.23.33.25}
create_user_on_container "pra-maria" "$PRA_API_IP" "13.23.33.26"

# 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
    test_connection "dva-api" "13.23.33.46"
    test_connection "rca-api" "13.23.33.36"
    test_connection "pra-api" "13.23.33.26"
fi

echo ""
echo "Configuration terminée!"
echo ""
echo "Notes importantes:"
echo "- Les utilisateurs ont été créés avec accès SELECT uniquement sur la base 'adresses'"
echo "- Trois types d'accès ont été configurés:"
echo "  1. Depuis l'IP spécifique de chaque container API"
echo "  2. Depuis localhost (pour les tests directs)"
echo "  3. Depuis tout le sous-réseau 13.23.33.% (optionnel, moins sécurisé)"
echo ""
echo "Pour tester manuellement depuis un container API:"
echo "incus exec [container-api] -- mysql -h [ip-maria] -u adresses_user -p'd66,AdrGeo.User' adresses"