import subprocess
import time
import os
import sys
import pkg_resources

def install_requirements():
    req_path = os.path.join(os.path.dirname(__file__), "requirements.txt")
    if not os.path.exists(req_path):
        print("⚠️ Soubor requirements.txt nebyl nalezen.")
        return

    print("📦 Kontrola a instalace závislostí z requirements.txt...")
    with open(req_path, "r", encoding="utf-8") as f:
        requirements = [line.strip() for line in f if line.strip() and not line.startswith("#")]

    missing = []
    for req in requirements:
        try:
            pkg_resources.require(req)
        except pkg_resources.DistributionNotFound:
            missing.append(req)
        except pkg_resources.VersionConflict:
            missing.append(req)

    if not missing:
        print("✅ Všechny závislosti jsou již nainstalovány.")
        return

    print(f"🔄 Instalují se chybějící závislosti: {', '.join(missing)}")
    result = subprocess.run([sys.executable, "-m", "pip", "install"] + missing)
    if result.returncode == 0:
        print("✅ Chybějící závislosti byly úspěšně nainstalovány.")
    else:
        print("❌ Chyba při instalaci závislostí!")

def start_process(script_path, name):
    print(f"🚀 Spouštím {name}...")
    return subprocess.Popen(["python", script_path], cwd="files")

def main():
    print("=== TitanBot Startup ===")
    install_requirements()
    processes = []

    # Spustí API server
    api_process = start_process("api.py", "FastAPI Server")
    processes.append(("API Server", api_process))
    time.sleep(3)

    # Spustí Flask web
    web_process = start_process("app.py", "Flask Web Server")
    processes.append(("Web Server", web_process))
    time.sleep(2)

    # Spustí Discord bota
    bot_process = start_process("main.py", "Discord Bot")
    processes.append(("Discord Bot", bot_process))

    print("\n✅ Všechny služby spuštěny!")
    print("📝 Pro ukončení stiskni Ctrl+C")

    try:
        for name, process in processes:
            process.wait()
    except KeyboardInterrupt:
        print("\n🛑 Ukončuji všechny služby...")
        for name, process in processes:
            process.terminate()
            print(f"❌ {name} ukončen")

if __name__ == "__main__":
    main()