"""
Прогон базового сценария через оркестратор
"""

import time
import requests
import sys
import json


ORCH_URL = "http://localhost:1717"
SCENARIO_ID = "full_pipeline"


def load_scenario(scenario_id: str):
    url = f"{ORCH_URL}/scenario/load/{scenario_id}"
    r = requests.post(url, timeout=10)
    r.raise_for_status()
    return r.json()["job_id"]


def run_all(job_id: str):
    url = f"{ORCH_URL}/scenario/{job_id}/run_all"
    r = requests.post(url, timeout=10)
    r.raise_for_status()
    return r.json()


def get_status(job_id: str):
    url = f"{ORCH_URL}/scenario/{job_id}"
    r = requests.get(url, timeout=10)
    r.raise_for_status()
    return r.json()


def main():
    try:
        # 1. Загружаем сценарий
        job_id = load_scenario(SCENARIO_ID)
        print(f"[OK] Загружен сценарий '{SCENARIO_ID}', job_id={job_id}")

        # 2. Запускаем все шаги
        print("Run Запускаю выполнение всех шагов...")
        run_all(job_id)

        # 3. Ждём завершения
        for _ in range(60):  # 60 циклов по 2 сек = 2 минуты
            status = get_status(job_id)
            steps = status.get("steps", [])
            done = all(step.get("status") in ("done", "failed") for step in steps)
            print("WAIT Статус:", json.dumps(status, ensure_ascii=False, indent=2))
            if done:
                print("\nDONE Сценарий завершён")
                break
            time.sleep(2)
        else:
            print("WARN Таймаут ожидания")

    except Exception as e:
        print("[FAIL] Ошибка:", e)
        sys.exit(1)


if __name__ == "__main__":
    main()
