#!/bin/bash
#
# Configuration centrale pour l'installation de MySQL 8.0
# Ce fichier contient toutes les variables utilisées par les scripts d'installation
#

# ================================================
# CONFIGURATION DU SERVEUR
# ================================================

# Adresse IP du serveur MySQL
SERVER_IP="141.94.141.195"

# Nom d'hôte du serveur MySQL
SERVER_HOSTNAME="mysql-server"

# Mot de passe root système
ROOT_PASSWORD="wzmS72V53be7mkGq"

# Activation du pare-feu
FIREWALL_ENABLED=true

# Liste des adresses IP autorisées à se connecter à MySQL
# Format: ("IP1" "IP2" "IP3")
ALLOWED_IPS=("46.105.71.168" "46.218.5.13")

# ================================================
# CONFIGURATION MYSQL
# ================================================

# Version de MySQL à installer
MYSQL_VERSION="8.0"

# Utilisateur système pour MySQL
MYSQL_SYSTEM_USER="mysql"
MYSQL_SYSTEM_GROUP="mysql"

# Mot de passe root MySQL
MYSQL_ROOT_PASSWORD="7?XiAJaVRSGd"

# Port MySQL
MYSQL_PORT=3306

# Adresse d'écoute MySQL (0.0.0.0 pour toutes les interfaces)
MYSQL_BIND_ADDRESS="0.0.0.0"

# Répertoires MySQL
MYSQL_DATA_DIR="/var/lib/mysql"
MYSQL_LOG_DIR="/var/log/mysql"
MYSQL_BACKUP_DIR="/backup/mysql"

# Fichiers MySQL
MYSQL_SOCKET="$MYSQL_DATA_DIR/mysql.sock"
MYSQL_PID_FILE="/var/run/mysqld/mysqld.pid"

# ID du serveur MySQL (pour la réplication)
MYSQL_SERVER_ID=1

# ================================================
# CONFIGURATION DE MIGRATION
# ================================================

# Serveur source
SOURCE_HOST="146.59.152.174"
SOURCE_USER="root"
SOURCE_PASSWORD="wzmS72V53be7mkGq"
SOURCE_DATABASE="lks_prod"

# ================================================
# CONFIGURATION BASE DE DONNÉES MAGENTO (DESTINATION)
# ================================================

# Nom de la base de données Magento
MYSQL_DATABASE="artnet_lksdev"

# Utilisateur MySQL pour Magento
MYSQL_USER="artnet_lksdev"

# Mot de passe MySQL pour Magento
MYSQL_PASSWORD="73mhyd6hYjfW"

# Variables pour le script de migration (utilisation directe)
DEST_DATABASE="artnet_lksdev"
DEST_DATABASE_USER="artnet_lksdev"
DEST_DATABASE_PASSWORD="$MYSQL_PASSWORD"

# Chemin vers la clé SSH pour la connexion au serveur source (laisser vide si authentification par mot de passe)
SSH_KEY_PATH=""

# Mot de passe SSH pour la connexion au serveur source (laisser vide si authentification par clé)
SSH_PASSWORD="k3kTp6EcguRhTKUnafvL"

# Remplacement de domaines
OLD_DOMAIN="lekingstore.com"
NEW_DOMAIN="lksdev.artnetis.net"

# Tables à exclure lors de la migration
EXCLUDE_TABLES=""

# ================================================
# CONFIGURATION MAGENTO (MIGRATION)
# ================================================

# Serveur source pour les fichiers Magento
SOURCE_SERVER="146.59.152.174"

# Chemins Magento
SOURCE_MAGENTO_PATH="/home/lks/public_html/"
DEST_MAGENTO_PATH="/home/artnet/public_html/dev/lksdev"

# Utilisateur et groupe pour Magento
DEST_USER="artnet"
DEST_GROUP="artnet"

# Configuration Varnish
VARNISH_PORT="8080"

# Domaine de destination
DEST_DOMAIN="lksdev.artnetis.net"

# Répertoire temporaire pour les archives
TEMP_DIR="/home/magento_migration"

# ================================================
# OPTIMISATION MYSQL
# ================================================

# Détection automatique des ressources du serveur
TOTAL_MEMORY_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
TOTAL_MEMORY_MB=$((TOTAL_MEMORY_KB / 1024))
TOTAL_MEMORY_GB=$((TOTAL_MEMORY_MB / 1024))
CPU_CORES=$(grep -c ^processor /proc/cpuinfo)

# InnoDB Buffer Pool (70-80% de la RAM totale)
MYSQL_BUFFER_POOL_SIZE="${TOTAL_MEMORY_MB}M"
if [ $TOTAL_MEMORY_GB -gt 128 ]; then
    # Pour les serveurs avec beaucoup de RAM, limiter à 70%
    MYSQL_BUFFER_POOL_SIZE="$((TOTAL_MEMORY_MB * 70 / 100))M"
elif [ $TOTAL_MEMORY_GB -gt 64 ]; then
    # Pour les serveurs avec RAM moyenne, utiliser 75%
    MYSQL_BUFFER_POOL_SIZE="$((TOTAL_MEMORY_MB * 75 / 100))M"
else
    # Pour les petits serveurs, utiliser 80%
    MYSQL_BUFFER_POOL_SIZE="$((TOTAL_MEMORY_MB * 80 / 100))M"
fi

# Nombre d'instances du buffer pool (1 par 1GB de buffer pool, max 16)
BUFFER_POOL_GB=$(($(echo $MYSQL_BUFFER_POOL_SIZE | sed 's/M//') / 1024))
MYSQL_BUFFER_POOL_INSTANCES=$BUFFER_POOL_GB
[ $MYSQL_BUFFER_POOL_INSTANCES -lt 1 ] && MYSQL_BUFFER_POOL_INSTANCES=1
[ $MYSQL_BUFFER_POOL_INSTANCES -gt 16 ] && MYSQL_BUFFER_POOL_INSTANCES=16

# Taille du log buffer (32M par défaut, plus pour les grands serveurs)
if [ $TOTAL_MEMORY_GB -gt 64 ]; then
    MYSQL_LOG_BUFFER_SIZE="64M"
elif [ $TOTAL_MEMORY_GB -gt 32 ]; then
    MYSQL_LOG_BUFFER_SIZE="48M"
else
    MYSQL_LOG_BUFFER_SIZE="32M"
fi

# Taille des fichiers de log InnoDB (256M par défaut, plus pour les grands serveurs)
if [ $TOTAL_MEMORY_GB -gt 64 ]; then
    MYSQL_INNODB_LOG_FILE_SIZE="512M"
elif [ $TOTAL_MEMORY_GB -gt 32 ]; then
    MYSQL_INNODB_LOG_FILE_SIZE="384M"
else
    MYSQL_INNODB_LOG_FILE_SIZE="256M"
fi

# Nombre de fichiers de log InnoDB
MYSQL_INNODB_LOG_FILES_IN_GROUP=2

# Capacité IO InnoDB (basée sur le nombre de cœurs)
if [ $CPU_CORES -gt 16 ]; then
    MYSQL_INNODB_IO_CAPACITY=2000
    MYSQL_INNODB_IO_CAPACITY_MAX=4000
elif [ $CPU_CORES -gt 8 ]; then
    MYSQL_INNODB_IO_CAPACITY=1000
    MYSQL_INNODB_IO_CAPACITY_MAX=2000
else
    MYSQL_INNODB_IO_CAPACITY=800
    MYSQL_INNODB_IO_CAPACITY_MAX=1600
fi

# Autres paramètres InnoDB
MYSQL_INNODB_FILE_PER_TABLE=ON
MYSQL_INNODB_FLUSH_METHOD=O_DIRECT
MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT=1

# Connexions et threads
MYSQL_MAX_CONNECTIONS=1000
MYSQL_THREAD_CACHE_SIZE=100

# Tailles des buffers
MYSQL_SORT_BUFFER_SIZE="4M"
MYSQL_JOIN_BUFFER_SIZE="4M"
MYSQL_TMP_TABLE_SIZE="64M"
MYSQL_MAX_HEAP_TABLE_SIZE="64M"

# ================================================
# CONFIGURATION DES SAUVEGARDES
# ================================================

# Répertoire des sauvegardes
BACKUP_DIR="/backup/mysql"

# Nombre de jours de rétention des sauvegardes
BACKUP_RETENTION_DAYS=7

# Compression des sauvegardes
BACKUP_COMPRESS=true

# Chiffrement des sauvegardes
BACKUP_ENCRYPT=false
BACKUP_ENCRYPTION_KEY=""

# ================================================
# VALIDATION DE LA CONFIGURATION
# ================================================

# Fonction pour afficher les informations de configuration
show_config_info() {
    echo "====================================================================="
    echo "CONFIGURATION MYSQL POUR MAGENTO 2.4.7"
    echo "====================================================================="
    echo "Serveur:"
    echo "  - IP: $SERVER_IP"
    echo "  - Hostname: $SERVER_HOSTNAME"
    echo "  - Mémoire: $TOTAL_MEMORY_GB GB"
    echo "  - CPU: $CPU_CORES cœurs"
    echo ""
    echo "MySQL:"
    echo "  - Version: $MYSQL_VERSION"
    echo "  - Port: $MYSQL_PORT"
    echo "  - Bind Address: $MYSQL_BIND_ADDRESS"
    echo "  - Data Directory: $MYSQL_DATA_DIR"
    echo "  - Log Directory: $MYSQL_LOG_DIR"
    echo "  - Backup Directory: $MYSQL_BACKUP_DIR"
    echo ""
    echo "Optimisation:"
    echo "  - Buffer Pool: $MYSQL_BUFFER_POOL_SIZE"
    echo "  - Buffer Pool Instances: $MYSQL_BUFFER_POOL_INSTANCES"
    echo "  - Log Buffer: $MYSQL_LOG_BUFFER_SIZE"
    echo "  - Log File Size: $MYSQL_INNODB_LOG_FILE_SIZE"
    echo "  - Max Connections: $MYSQL_MAX_CONNECTIONS"
    echo "====================================================================="
}

# Affichage des informations de configuration si le script est exécuté directement
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    show_config_info
    echo "Ce script est destiné à être sourcé par d'autres scripts, pas à être exécuté directement."
    echo "Exemple: source ./00_config.sh"
fi
