import subprocess
import os
import sys

COMPOSE_DIR = "backend"
NETWORK_NAME = "arc-network"

PROJECTS = {
    "infra": "arc-infra",
    "ai": "arc-ai",
    "app": "arc-app",
    "sandbox": "arc-sandbox"
}

def run_command(command):
    """Exécute une commande système."""
    print(f"🚀 Exécution : {' '.join(command) if isinstance(command, list) else command}")
    is_windows = os.name == 'nt'
    try:
        subprocess.run(command, shell=is_windows, check=True)
        return True
    except subprocess.CalledProcessError:
        return False

def main():
    print("🛑 Démarrage de l'arrêt complet du projet...")

    # 1. Arrêter l'Application
    print(f"\n--- ARRÊT DE L'APPLICATION ({PROJECTS['app']}) ---")
    run_command(["docker", "compose", "-p", PROJECTS["app"], "-f", f"{COMPOSE_DIR}/docker-compose.yml", "down"])

    # 2. Arrêter l'IA
    print(f"\n--- ARRÊT DE L'IA ({PROJECTS['ai']}) ---")
    run_command(["docker", "compose", "-p", PROJECTS["ai"], "-f", f"{COMPOSE_DIR}/docker-compose-ai.yml", "down"])

    # 3. Arrêter l'Infrastructure
    print(f"\n--- ARRÊT DE L'INFRASTRUCTURE ({PROJECTS['infra']}) ---")
    run_command(["docker", "compose", "-p", PROJECTS["infra"], "-f", f"{COMPOSE_DIR}/docker-compose-infra.yml", "down"])

    # 4. Arrêter la Sandbox
    print(f"\n--- ARRÊT DE LA SANDBOX ({PROJECTS['sandbox']}) ---")
    run_command(["docker", "compose", "-p", PROJECTS["sandbox"], "-f", f"{COMPOSE_DIR}/docker-compose-sandbox.yml", "down"])

    # 5. Supprimer le réseau
    print(f"\n--- NETTOYAGE DU RÉSEAU ---")
    run_command(["docker", "network", "rm", NETWORK_NAME])

    print("\n✅ Tout est arrêté proprement.")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n🛑 Arrêt forcé par l'utilisateur.")