# === 1. Appliquer le namespace principal d'abord ===
Write-Host "🚀 Création du namespace devops-demo..."
kubectl apply -f C:\DevOpsProject\kubernetes\manifests\namespace.yaml

# Attendre que le namespace soit actif
Write-Host "⏳ Attente que le namespace devops-demo soit prêt..."
kubectl wait --for=condition=Active namespace/devops-demo --timeout=60s

# === 2. Appliquer les ConfigMap et Secret (préalables à nginx) ===
Write-Host "📦 Création du ConfigMap et Secret pour Nginx..."
kubectl apply -f C:\DevOpsProject\kubernetes\manifests\configmap.yaml
kubectl create secret generic nginx-tls --from-file=C:\DevOpsProject\config\certs -n devops-demo --dry-run=client -o yaml | kubectl apply -f -

# === 3. Appliquer tous les autres manifests (y compris nginx-proxy.yaml) ===
Write-Host "🔄 Application des déploiements (app, db, nginx-proxy)..."
kubectl apply -f C:\DevOpsProject\kubernetes\manifests

# === 4. Attendre que nginx-proxy soit prêt (dépendance critique) ===
Write-Host "⏳ Attente que nginx-proxy soit en état Ready..."
kubectl wait --for=condition=ready pod -l app=nginx-proxy -n devops-demo --timeout=120s

# === 5. Installer ArgoCD si ce n'est pas déjà fait ===
if ($(kubectl get namespace argocd -o name) -eq $null) {
    Write-Host "🎯 Installation d'ArgoCD..."
    kubectl create namespace argocd
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
}

# Attendre que ArgoCD soit disponible
Write-Host "⏳ Attente du déploiement d'ArgoCD..."
kubectl wait --for=condition=available --timeout=180s -n argocd deployment/argocd-server

# === 6. Récupérer le mot de passe admin ===
$Password = kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | ForEach-Object { [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($_)) }

# === 7. Lancer le port-forward pour ArgoCD ===
Start-Process kubectl -ArgumentList "port-forward svc/argocd-server -n argocd 8080:443" -WindowStyle Hidden

# === 8. Ouvrir l'interface ArgoCD dans le navigateur ===
Start-Sleep -Seconds 5
$Url = "https://localhost:8080"
Start-Process $Url

# === Résumé final ===
Write-Host "✅ Restauration terminée !"
Write-Host "🌐 Accès ArgoCD : $Url"
Write-Host "👤 Utilisateur : admin"
Write-Host "🔑 Mot de passe : $Password"
Write-Host "💡 Acceptez le certificat auto-signé dans le navigateur."   