#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import importlib.util
import sys
from pathlib import Path

# Load FunctionsLoader
FUNCTIONS_LOADER_PATH = Path(r"C:\Reporting\Functions\FunctionsLoader.py")
spec = importlib.util.spec_from_file_location("FunctionsLoader", FUNCTIONS_LOADER_PATH)
FunctionsLoader = importlib.util.module_from_spec(spec)
sys.modules["FunctionsLoader"] = FunctionsLoader
spec.loader.exec_module(FunctionsLoader)

"""
Spustí všechny PRAVIDELNÉ skripty v daném pořadí:

0) PRAVIDELNE_0_READ_ALL_ACTIVE_POZADAVKY.py
1) PRAVIDELNE_1_ReadLast300DonePozadavku.py
2) PRAVIDELNE_2_ReadPoznamky.py
3) PRAVIDELNE_3_StahniKomunikaci.py
4) PRAVIDELNE_4_StahniPrilohyUlozDoMySQL.py
5) PRAVIDELNE_5_SaveToFileSystem incremental.py
"""

import time, socket
for _ in range(30):
    try:
        socket.create_connection(("192.168.1.76", 3307), timeout=3).close()
        break
    except OSError:
        time.sleep(10)

import sys
import subprocess
from pathlib import Path
from datetime import datetime

# složka, kde leží tento skript i všechny PRAVIDELNE_*.py
BASE_DIR = Path(__file__).resolve().parent

SCRIPTS_IN_ORDER = [
    "PRAVIDELNE_0_READ_ALL_ACTIVE_POZADAVKY.py",
    "PRAVIDELNE_1_ReadLast300DonePozadavku.py",
    "PRAVIDELNE_2_ReadPoznamky.py",
    "PRAVIDELNE_3_StahniKomunikaci.py",
    "PRAVIDELNE_4_StahniPrilohyUlozDoMySQL.py",
    "PRAVIDELNE_5_SaveToFileSystem incremental.py",  # má mezeru v názvu, ale v listu je to OK
]

LOG_FILE = BASE_DIR / "PRAVIDELNE_log.txt"


def log(msg: str):
    """Zapíše zprávu do log souboru i na konzoli."""
    ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    line = f"[{ts}] {msg}"
    print(line)
    try:
        with LOG_FILE.open("a", encoding="utf-8") as f:
            f.write(line + "\n")
    except Exception:
        # log nesmí shodit běh
        pass


def main():
    log("=== START pravidelného běhu ===")

    for script_name in SCRIPTS_IN_ORDER:
        script_path = BASE_DIR / script_name

        if not script_path.exists():
            log(f"❌ Skript nenalezen: {script_path}")
            continue

        log(f"▶ Spouštím: {script_path.name}")

        # spustíme stejným interpretem, kterým běží tento orchestr
        try:
            result = subprocess.run(
                [sys.executable, str(script_path)],
                cwd=str(BASE_DIR),
                capture_output=True,
                text=True,
                encoding="utf-8",
                errors="ignore",  # NEZKAZÍ SE, NEZBOŘÍ SE, PROSTĚ IGNORUJE CP1252 NEZÁKONNÉ BYTES
            )
        except Exception as e:
            log(f"   💥 Chyba při spouštění {script_path.name}: {e}")
            continue

        # vypíšeme návratový kód
        log(f"   ↳ return code: {result.returncode}")

        # pokud něco skript vypsal na stderr, logneme
        if result.stderr:
            log(f"   ⚠ stderr {script_path.name}:\n{result.stderr.strip()}")

        # stdout můžeš podle chuti také logovat (někdy je toho moc):
        # if result.stdout:
        #     log(f"   ℹ stdout {script_path.name}:\n{result.stdout.strip()}")

    log("=== KONEC pravidelného běhu ===\n")


if __name__ == "__main__":
    main()
