"""
Orchestrační skript — stáhne nové zprávy ze všech pojišťoven po sobě.

Spouští 04_prihlaseni_a_stahuj_nove.py v každém adresáři pojišťovny.
Pokud jedna pojišťovna selže, pokračuje dál na další.

POUŽITÍ:
  python stahuj_vse_pojistovny.py
"""

import subprocess
import sys
import os
from datetime import datetime

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", ".."))
from Knihovny.EmailMessagingGraph import send_mail

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

EMAIL_PRIJEMCE = "vladimir.buzalka@buzalka.cz"

POJISTOVNY = [
    ("111 VZP",     "VZP"),
    ("205 ČPZP",    "ČPZP"),
    ("207 OZP",     "OZP"),
    ("209 ZPŠ",     "ZPŠ"),
    ("211 ZPMVČR",  "ZPMVČR"),
    ("213 RBP",     "RBP"),
]

SKRIPT = "04_prihlaseni_a_stahuj_nove.py"


def main() -> None:
    start = datetime.now()
    print(f"=== Stahování zpráv ze všech pojišťoven ===")
    print(f"Spuštěno: {start.strftime('%Y-%m-%d %H:%M:%S')}\n")

    vysledky = []

    for adresar, nazev in POJISTOVNY:
        skript_path = os.path.join(BASE_DIR, adresar, SKRIPT)
        if not os.path.exists(skript_path):
            print(f"\n[{nazev}] PŘESKOČENO — skript nenalezen: {skript_path}")
            vysledky.append((nazev, "přeskočeno"))
            continue

        print(f"\n{'='*50}")
        print(f"  {nazev}")
        print(f"{'='*50}")

        result = subprocess.run(
            [sys.executable, skript_path],
            cwd=os.path.join(BASE_DIR, adresar),
            check=False,
        )

        if result.returncode == 0:
            print(f"[{nazev}] OK")
            vysledky.append((nazev, "OK"))
        else:
            print(f"[{nazev}] CHYBA (kód {result.returncode})")
            vysledky.append((nazev, f"chyba (kód {result.returncode})"))

    elapsed = datetime.now() - start
    print(f"\n{'='*50}")
    print(f"Hotovo za {int(elapsed.total_seconds())} s")
    print(f"{'='*50}")
    for nazev, stav in vysledky:
        print(f"  {nazev:<12} {stav}")

    chyby = [n for n, s in vysledky if s != "OK" and s != "přeskočeno"]
    ok    = [n for n, s in vysledky if s == "OK"]
    predmet = f"Pojišťovny {start.strftime('%d.%m.%Y')} — "
    predmet += "vše OK ✓" if not chyby else f"CHYBA: {', '.join(chyby)}"

    radky = "".join(
        f"<tr><td style='padding:4px 12px'>{n}</td>"
        f"<td style='padding:4px 12px;color:{'green' if s == 'OK' else 'gray' if s == 'přeskočeno' else 'red'}'>"
        f"{'✓' if s == 'OK' else s}</td></tr>"
        for n, s in vysledky
    )
    body = (
        f"<p>Stahování zpráv z pojišťoven dokončeno za {int(elapsed.total_seconds())} s.</p>"
        f"<table border='0' cellspacing='0'>{radky}</table>"
        f"<p style='color:gray;font-size:11px'>Spuštěno: {start.strftime('%Y-%m-%d %H:%M:%S')}</p>"
    )
    try:
        send_mail(to=EMAIL_PRIJEMCE, subject=predmet, body=body, html=True)
        print(f"\nEmail odeslán: {EMAIL_PRIJEMCE}")
    except Exception as e:
        print(f"\nEmail se nepodařilo odeslat: {e}")


if __name__ == "__main__":
    main()
