# /home/suprafl1/kleiner/backend/live_scan/market_mode.py
"""
Marktmodus-Modul für den Live-Scan.

Liest data/market/market.json ein und leitet daraus einen
einfachen Marktmodus ab:

- TREND_LONG   -> nur Long-Setups bevorzugen
- TREND_SHORT  -> nur Short-Setups bevorzugen
- RANGE        -> Range-/Neutral-Strategien
- OFF          -> Markttrend-Daten veraltet -> Live-Scan pausieren
- UNKNOWN      -> Fallback, wenn etwas unklar ist
"""

from pathlib import Path
from typing import Literal, Dict, Any
import json

# Datei-Pfade
ROOT = Path(__file__).resolve().parents[2]  # -> /home/suprafl1/kleiner
MARKET_JSON = ROOT / "data" / "market" / "market.json"

MarketMode = Literal["TREND_LONG", "TREND_SHORT", "RANGE", "OFF", "UNKNOWN"]


def load_market_state(path: Path = MARKET_JSON) -> Dict[str, Any]:
    """Lädt den aktuellen Marktstatus aus data/market/market.json."""
    if not path.exists():
        raise FileNotFoundError(f"Marktdatei nicht gefunden: {path}")

    with path.open("r", encoding="utf-8") as f:
        return json.load(f)


def determine_market_mode(state: Dict[str, Any]) -> MarketMode:
    """
    Leitet aus dem gespeicherten Trend einen Modus ab.
    Einfacher Start:
    - Wenn Trend-Daten nicht 'aktuell' -> OFF
    - Aufwärts  + MTF mehrheitlich aufwärts  -> TREND_LONG
    - Abwärts   + MTF mehrheitlich abwärts  -> TREND_SHORT
    - Seitwärts                             -> RANGE
    - sonst                                  -> UNKNOWN
    """
    data_quality = state.get("data_quality") or {}
    if data_quality.get("trend_status") != "aktuell":
        return "OFF"

    trend = (state.get("market_trend") or "").lower()
    mtf = state.get("mtf") or {}
    d1 = (mtf.get("D1") or "").lower()
    h1 = (mtf.get("H1") or "").lower()
    m15 = (mtf.get("M15") or "").lower()

    ups = [t for t in (d1, h1, m15) if t == "aufwärts"]
    downs = [t for t in (d1, h1, m15) if t == "abwärts"]

    if trend == "aufwärts" and len(ups) >= 2:
        return "TREND_LONG"
    if trend == "abwärts" and len(downs) >= 2:
        return "TREND_SHORT"
    if trend == "seitwärts":
        return "RANGE"

    return "UNKNOWN"


def get_market_mode() -> Dict[str, Any]:
    """
    Komfort-Funktion:
    - liest market.json
    - bestimmt den Modus
    - gibt ein kleines Info-Dict zurück
    """
    state = load_market_state()
    mode: MarketMode = determine_market_mode(state)
    return {
        "mode": mode,
        "market_trend": state.get("market_trend"),
        "mtf": state.get("mtf"),
        "position_vs_ema": state.get("position_vs_ema"),
        "data_quality": state.get("data_quality"),
        "raw": state,
    }


if __name__ == "__main__":
    info = get_market_mode()
    print("Marktmodus:", info["mode"])
    print("Trend:", info["market_trend"])
    print("MTF:", info["mtf"])
    print("Datenqualität:", info["data_quality"])
