# =============================================================
#  AMA EDU - Installation synchronisation (PowerShell natif)
#  Exécuter UNE SEULE FOIS sur le poste local Windows Server
#  Clic droit → Exécuter avec PowerShell
# =============================================================

$ErrorActionPreference = "Stop"
$Host.UI.RawUI.WindowTitle = "AMA EDU - Installation"

# ── Couleurs ──────────────────────────────────────────────────
function Write-Ok($msg)  { Write-Host "  [OK] $msg" -ForegroundColor Green }
function Write-Err($msg) { Write-Host "  [!!] $msg" -ForegroundColor Red }
function Write-Info($msg){ Write-Host "  [-]  $msg" -ForegroundColor Cyan }
function Write-Step($msg){ Write-Host "`n== $msg ==" -ForegroundColor Yellow }

Clear-Host
Write-Host ""
Write-Host "  ================================================" -ForegroundColor Cyan
Write-Host "    AMA EDU - Installation de la synchronisation  " -ForegroundColor Cyan
Write-Host "  ================================================" -ForegroundColor Cyan
Write-Host ""

# ── Chemins ───────────────────────────────────────────────────
$ScriptRoot  = Split-Path -Parent $MyInvocation.MyCommand.Path
$SshDir      = "$env:USERPROFILE\.ssh"
$KeyFile     = "$SshDir\amaedu_sync_key"
$KeyFilePub  = "$KeyFile.pub"

# ── Étape 1 : Vérifier OpenSSH ────────────────────────────────
Write-Step "Étape 1 : Vérification OpenSSH"

$sshPath = Get-Command ssh -ErrorAction SilentlyContinue
if (-not $sshPath) {
    Write-Err "OpenSSH n'est pas installé."
    Write-Host ""
    Write-Host "  Installation automatique..." -ForegroundColor Yellow
    try {
        Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 | Out-Null
        Write-Ok "OpenSSH installé avec succès."
    } catch {
        Write-Err "Impossible d'installer OpenSSH automatiquement."
        Write-Host ""
        Write-Host "  Installez-le manuellement :"
        Write-Host "  Paramètres → Applications → Fonctionnalités facultatives → OpenSSH Client"
        Write-Host ""
        Read-Host "Appuyez sur Entrée pour quitter"
        exit 1
    }
} else {
    Write-Ok "OpenSSH disponible : $($sshPath.Source)"
}

# ── Étape 2 : Générer la clé SSH ──────────────────────────────
Write-Step "Étape 2 : Clé SSH dédiée"

if (-not (Test-Path $SshDir)) {
    New-Item -ItemType Directory -Path $SshDir | Out-Null
}

if (Test-Path $KeyFile) {
    Write-Ok "Clé SSH déjà existante : $KeyFile"
} else {
    Write-Info "Génération de la clé SSH..."
    $hostname = $env:COMPUTERNAME
    ssh-keygen -t ed25519 -f $KeyFile -N '""' -C "amaedu-sync-$hostname" 2>&1 | Out-Null
    if (Test-Path $KeyFile) {
        Write-Ok "Clé générée : $KeyFile"
    } else {
        Write-Err "Échec de la génération de clé SSH."
        Read-Host "Appuyez sur Entrée pour quitter"
        exit 1
    }
}

# ── Étape 3 : Afficher la clé publique ────────────────────────
Write-Step "Étape 3 : Clé publique à copier sur le VPS"

$pubKey = Get-Content $KeyFilePub -Raw

Write-Host ""
Write-Host "  ┌─────────────────────────────────────────────────┐" -ForegroundColor White
Write-Host "  │  Copiez cette clé publique sur le VPS           │" -ForegroundColor White
Write-Host "  └─────────────────────────────────────────────────┘" -ForegroundColor White
Write-Host ""
Write-Host $pubKey -ForegroundColor White
Write-Host ""

# Copier dans le presse-papier automatiquement
try {
    $pubKey | Set-Clipboard
    Write-Ok "Clé publique copiée dans le presse-papier !"
} catch {
    Write-Info "Copiez manuellement la clé ci-dessus."
}

Write-Host ""
Write-Host "  Commandes à exécuter sur le VPS (en root) :" -ForegroundColor Yellow
Write-Host ""
Write-Host "    useradd -m -s /bin/bash sync" -ForegroundColor Gray
Write-Host "    mkdir -p /home/sync/.ssh" -ForegroundColor Gray
Write-Host "    echo '$($pubKey.Trim())' >> /home/sync/.ssh/authorized_keys" -ForegroundColor Gray
Write-Host "    chmod 700 /home/sync/.ssh" -ForegroundColor Gray
Write-Host "    chmod 600 /home/sync/.ssh/authorized_keys" -ForegroundColor Gray
Write-Host "    chown -R sync:sync /home/sync/.ssh" -ForegroundColor Gray
Write-Host ""

# ── Étape 4 : Test connexion SSH (optionnel) ──────────────────
Write-Step "Étape 4 : Test de connexion SSH (optionnel)"

$testNow = Read-Host "  Voulez-vous tester la connexion SSH maintenant ? [o/N]"

if ($testNow -match "^[oO]$") {
    $VpsHost = "161.97.128.28"
    $VpsUser = "sync"
    Write-Info "Connexion vers $VpsUser@$VpsHost..."

    $result = ssh -i $KeyFile `
        -o ConnectTimeout=10 `
        -o StrictHostKeyChecking=accept-new `
        -o BatchMode=yes `
        "$VpsUser@$VpsHost" `
        "echo 'Connexion OK - Utilisateur : $(whoami)'" 2>&1

    if ($LASTEXITCODE -eq 0) {
        Write-Ok "Connexion SSH établie avec succès !"
        Write-Host "  Réponse VPS : $result" -ForegroundColor Gray
    } else {
        Write-Host "  [!!] Connexion échouée (normal si la clé n'est pas encore ajoutée sur le VPS)." -ForegroundColor DarkYellow
        Write-Host "       Ajoutez la clé publique sur le VPS puis retestez avec :" -ForegroundColor DarkYellow
        Write-Host "       ssh -i $KeyFile sync@$VpsHost" -ForegroundColor Gray
    }
}

# ── Étape 5 : Créer les répertoires ───────────────────────────
Write-Step "Étape 5 : Création des répertoires"

$dirs = @("$ScriptRoot\logs", "$ScriptRoot\dumps")
foreach ($dir in $dirs) {
    if (-not (Test-Path $dir)) {
        New-Item -ItemType Directory -Path $dir | Out-Null
        Write-Ok "Créé : $dir"
    } else {
        Write-Ok "Existant : $dir"
    }
}

# ── Étape 6 : Vérifier la configuration ───────────────────────
Write-Step "Étape 6 : Rappel de configuration"

Write-Host ""
Write-Host "  Vérifiez ces variables dans scripts\sync.sh :" -ForegroundColor Yellow
Write-Host "    DB_USER   → utilisateur MySQL local" -ForegroundColor Gray
Write-Host "    DB_PASS   → mot de passe MySQL local" -ForegroundColor Gray
Write-Host "    DB_NAME   → nom de la base locale" -ForegroundColor Gray
Write-Host "    LOCAL_URL → URL application locale (ex: http://localhost)" -ForegroundColor Gray
Write-Host ""
Write-Host "  Vérifiez ces variables dans vps\sync_import.sh :" -ForegroundColor Yellow
Write-Host "    DB_USER   → utilisateur MySQL VPS" -ForegroundColor Gray
Write-Host "    DB_PASS   → mot de passe MySQL VPS" -ForegroundColor Gray
Write-Host "    APP_URL   → URL application VPS" -ForegroundColor Gray
Write-Host "    APP_DIR   → répertoire Symfony sur le VPS" -ForegroundColor Gray

# ── Fin ───────────────────────────────────────────────────────
Write-Host ""
Write-Host "  ================================================" -ForegroundColor Green
Write-Host "    Installation terminée.                        " -ForegroundColor Green
Write-Host "    Double-cliquez sur sync_amaedu.bat pour       " -ForegroundColor Green
Write-Host "    lancer une synchronisation.                   " -ForegroundColor Green
Write-Host "  ================================================" -ForegroundColor Green
Write-Host ""
Read-Host "  Appuyez sur Entrée pour fermer"
