#!/usr/bin/env python3
"""
run_live_scan.py

Orchestrator für "Kleine Elite Trading – Live-Scan v1".

Phase 1:
- Lädt Konfiguration
- Liest Marktmodus (SPY/QQQ)
- Schreibt Logeintrag
- Bereitet Struktur für spätere Scan-Schritte vor

Geplanter Aufruf:
- alle 5 Minuten per Cron während US-Börsenzeiten
"""

from __future__ import annotations

import logging
from datetime import datetime, timezone
from pathlib import Path
from typing import Any, Dict

from live_scan_config import load_config
from market_mode import get_market_mode

# ROOT zeigt auf das Projekt-Root /kleiner/
ROOT = Path(__file__).resolve().parents[2]
LOG_DIR = ROOT / "logs"
LOG_FILE = LOG_DIR / "live_scan.log"


def _setup_logging() -> None:
    LOG_DIR.mkdir(parents=True, exist_ok=True)

    # Basis-Logger konfigurieren (File + Konsole)
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    # Doppel-Handler vermeiden, falls Script mehrfach importiert wird
    if not any(isinstance(h, logging.FileHandler) for h in logger.handlers):
        fh = logging.FileHandler(LOG_FILE, encoding="utf-8")
        fh.setLevel(logging.INFO)
        fmt = logging.Formatter("[%(asctime)s] %(levelname)s %(name)s: %(message)s")
        fh.setFormatter(fmt)
        logger.addHandler(fh)

    if not any(isinstance(h, logging.StreamHandler) for h in logger.handlers):
        sh = logging.StreamHandler()
        sh.setLevel(logging.INFO)
        fmt = logging.Formatter("[%(asctime)s] %(levelname)s %(name)s: %(message)s")
        sh.setFormatter(fmt)
        logger.addHandler(sh)


def run_live_scan() -> Dict[str, Any]:
    """
    Führt einen Live-Scan-Run aus.

    Phase-1-Implementierung:
    - Konfiguration laden
    - Marktmodus bestimmen
    - Alles im Log vermerken
    - Rückgabe eines einfachen Statusdicts (für Tests/Debug)
    """
    _setup_logging()
    logger = logging.getLogger(__name__)

    now_utc = datetime.now(timezone.utc)
    logger.info("Live-Scan v1 gestartet (Phase 1, Skeleton).")

    config = load_config()
    market_mode = get_market_mode()

    logger.info("Konfiguration geladen (Version %s).", config.get("version"))
    logger.info("Marktmodus: %s (confidence=%.2f)", market_mode.get("mode"), market_mode.get("confidence", 0.0))

    status: Dict[str, Any] = {
        "timestamp_utc": now_utc.isoformat(),
        "mode": market_mode.get("mode"),
        "mode_confidence": market_mode.get("confidence"),
        "config_version": config.get("version"),
    }

    # TODO (Phase 2+):
    # - 20 Daytrader-Ticker laden
    # - Basisfilter anwenden
    # - Setups/Scoring/Signal-Engine durchlaufen
    # - active_signals.json / signal_history.json schreiben

    logger.info("Live-Scan v1 (Phase 1) abgeschlossen.")
    return status


if __name__ == "__main__":
    result = run_live_scan()
    # Für manuelle Tests einfache Ausgabe
    import json as _json
    print(_json.dumps(result, indent=2, ensure_ascii=False))
