#!/bin/bash
#
# Script de patch pour adapter migrate_from_backup.php et migrate_batch.sh
# pour fonctionner avec --env=rca|pra et source=geosector
#

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PHP_SCRIPT="$SCRIPT_DIR/php/migrate_from_backup.php"
BATCH_SCRIPT="$SCRIPT_DIR/migrate_batch.sh"

echo "=== Patching migration scripts ==="
echo ""

# Backup des fichiers originaux
echo "Creating backups..."
cp "$PHP_SCRIPT" "$PHP_SCRIPT.backup"
cp "$BATCH_SCRIPT" "$BATCH_SCRIPT.backup"
echo "✓ Backups created"
echo ""

# ============================================================
# PATCH 1: migrate_from_backup.php - Configuration multi-env
# ============================================================

echo "Patching migrate_from_backup.php..."

# Étape 1: Remplacer les constantes DB par configuration multi-env
sed -i '31,50s/.*/    \/\/ REPLACED BY PATCH - see below/' "$PHP_SCRIPT"

# Insérer la nouvelle configuration après la ligne 38
sed -i '38a\
    private $env;\
\
    \/\/ Configuration multi-environnement\
    private const ENVIRONMENTS = [\
        '\''rca'\'' => [\
            '\''host'\'' => '\''13.23.33.3'\'',       \/\/ maria3 sur IN3\
            '\''port'\'' => 3306,\
            '\''user'\'' => '\''rca_geo_user'\'',\
            '\''pass'\'' => '\''UPf3C0cQ805LypyM71iW'\'',\
            '\''target_db'\'' => '\''rca_geo'\'',\
            '\''source_db'\'' => '\''geosector'\''    \/\/ Base synchronisée par PM7\
        ],\
        '\''pra'\'' => [\
            '\''host'\'' => '\''13.23.33.4'\'',       \/\/ maria4 sur IN4\
            '\''port'\'' => 3306,\
            '\''user'\'' => '\''pra_geo_user'\'',\
            '\''pass'\'' => '\''d2jAAGGWi8fxFrWgXjOA'\'',\
            '\''target_db'\'' => '\''pra_geo'\'',\
            '\''source_db'\'' => '\''geosector'\''    \/\/ Base synchronisée par PM7\
        ]\
    ];' "$PHP_SCRIPT"

# Étape 2: Modifier le constructeur pour accepter $env
sed -i 's/public function __construct($sourceDbName, $targetDbName, $mode/public function __construct($env, $mode/' "$PHP_SCRIPT"

# Étape 3: Adapter le corps du constructeur
sed -i '/public function __construct/,/^    }$/{
    s/\$this->sourceDbName = \$sourceDbName;/\$this->env = \$env;\n        if (!isset(self::ENVIRONMENTS[\$env])) {\n            throw new Exception("Invalid environment: \$env. Use '\''rca'\'' or '\''pra'\''");\n        }\n        \$config = self::ENVIRONMENTS[\$env];\n        \$this->sourceDbName = \$config['\''source_db'\''];\n        \$this->targetDbName = \$config['\''target_db'\''];/
    s/\$this->targetDbName = \$targetDbName;//
    s/Source: {\$sourceDbName}/Environment: \$env/
    s/Cible: {\$targetDbName}/Source: {\$this->sourceDbName} → Target: {\$this->targetDbName}/
}' "$PHP_SCRIPT"

# Étape 4: Modifier connect() pour utiliser la config de l'env
sed -i '/public function connect()/,/^    }$/{
    s/self::DB_HOST/self::ENVIRONMENTS[\$this->env]['\''host'\'']/g
    s/self::DB_PORT/self::ENVIRONMENTS[\$this->env]['\''port'\'']/g
    s/self::DB_USER_ROOT/self::ENVIRONMENTS[\$this->env]['\''user'\'']/g
    s/self::DB_PASS_ROOT/self::ENVIRONMENTS[\$this->env]['\''pass'\'']/g
    s/self::DB_USER/self::ENVIRONMENTS[\$this->env]['\''user'\'']/g
    s/self::DB_PASS/self::ENVIRONMENTS[\$this->env]['\''pass'\'']/g
}' "$PHP_SCRIPT"

# Étape 5: Modifier parseArguments() - supprimer source-db et target-db, ajouter env
sed -i '/function parseArguments/,/^}$/{
    s/'\''source-db'\'' => null,/'\''env'\'' => '\''rca'\'',/
    s/'\''target-db'\'' => '\''pra_geo'\'',//
}' "$PHP_SCRIPT"

# Étape 6: Modifier showHelp()
sed -i '/function showHelp/,/^}$/{
    s/--source-db=NAME.*\[REQUIS\]/--env=ENV          Environment: '\''rca'\'' (recette) ou '\''pra'\'' (production) [défaut: rca]/
    s/--target-db=NAME.*/  (supprimé - déduit automatiquement de --env)/
    s/--source-db=geosector_20251007/--env=rca/g
    s/--target-db=pra_geo//g
    s/--target-db=rca_geo//g
}' "$PHP_SCRIPT"

# Étape 7: Modifier la validation des arguments
sed -i '/Validation des arguments/,/exit(1);/{
    s/if (!$args\['\''source-db'\''\])/if (!isset(self::ENVIRONMENTS[\$args['\''env'\'']]))/
    s/--source-db est requis/--env doit être '\''rca'\'' ou '\''pra'\''/
}' "$PHP_SCRIPT"

# Étape 8: Modifier l'instanciation de BackupMigration
sed -i '/new BackupMigration/,/);/{
    s/\$args\['\''source-db'\''\],/\$args['\''env'\''],/
    s/\$args\['\''target-db'\''\],//
}' "$PHP_SCRIPT"

echo "✓ migrate_from_backup.php patched"
echo ""

# ============================================================
# PATCH 2: migrate_batch.sh - Adapter pour env rca/pra
# ============================================================

echo "Patching migrate_batch.sh..."

# Étape 1: Détecter l'environnement automatiquement ou via paramètre
sed -i '/# Configuration/a\
\
# Détection automatique de l'\''environnement\
if [ -f "/etc/hostname" ]; then\
    CONTAINER_NAME=$(cat /etc/hostname)\
    case $CONTAINER_NAME in\
        rca-geo)\
            ENV="rca"\
            ;;\
        pra-geo)\
            ENV="pra"\
            ;;\
        *)\
            ENV="rca"  # Défaut\
            ;;\
    esac\
else\
    ENV="rca"  # Défaut\
fi' "$BATCH_SCRIPT"

# Étape 2: Remplacer SOURCE_DB et TARGET_DB
sed -i 's/SOURCE_DB="geosector_20251013_13"/# SOURCE_DB removed - always "geosector" (deduced from --env)/' "$BATCH_SCRIPT"
sed -i 's/TARGET_DB="pra_geo"/# TARGET_DB removed - deduced from --env/' "$BATCH_SCRIPT"

# Étape 3: Ajouter option --env dans le parsing
sed -i '/--interactive|-i)/i\
        --env)\
            ENV="$2"\
            shift 2\
            ;;' "$BATCH_SCRIPT"

# Étape 4: Modifier les appels à migrate_from_backup.php - ligne 200
sed -i '200,210s/--source-db="\$SOURCE_DB"/--env="$ENV"/' "$BATCH_SCRIPT"
sed -i '200,210s/--target-db="\$TARGET_DB"//' "$BATCH_SCRIPT"

# Étape 5: Modifier les appels dans la boucle - ligne 374
sed -i '374,380s/--source-db="\$SOURCE_DB"/--env="$ENV"/' "$BATCH_SCRIPT"
sed -i '374,380s/--target-db="\$TARGET_DB"//' "$BATCH_SCRIPT"

# Étape 6: Mettre à jour les messages de log
sed -i 's/📁 Source: \$SOURCE_DB/🌍 Environment: $ENV/' "$BATCH_SCRIPT"
sed -i 's/📁 Cible: \$TARGET_DB/📁 Source: geosector → Target: (déduit de $ENV)/' "$BATCH_SCRIPT"

echo "✓ migrate_batch.sh patched"
echo ""

# ============================================================
# Résumé
# ============================================================

echo "=== Patch completed ==="
echo ""
echo "Backups saved:"
echo "  - $PHP_SCRIPT.backup"
echo "  - $BATCH_SCRIPT.backup"
echo ""
echo "New usage:"
echo "  # Sur rca-geo (détection auto)"
echo "  ./migrate_batch.sh"
echo ""
echo "  # Sur pra-geo avec --env explicite"
echo "  ./migrate_batch.sh --env=pra"
echo ""
echo "  # Migration d'une entité spécifique"
echo "  php php/migrate_from_backup.php --env=rca --mode=entity --entity-id=45"
echo ""
echo "To restore backups:"
echo "  cp $PHP_SCRIPT.backup $PHP_SCRIPT"
echo "  cp $BATCH_SCRIPT.backup $BATCH_SCRIPT"
