import json
import os
from pathlib import Path
from datetime import datetime, timedelta, timezone

def ensure_signal_lifecycle(signal):
    """
    Stellt sicher, dass jedes Signal:
    - status hat
    - valid_until korrekt gesetzt ist
    """
    # Default-Status
    if "status" not in signal:
        signal["status"] = "active"

    # valid_until automatisch berechnen
    if "valid_until" not in signal:
        created = signal.get("created_at")
        minutes = signal.get("valid_minutes")

        if created and minutes:
            try:
                created_dt = datetime.fromisoformat(created.replace("Z", "+00:00"))
                valid_until = created_dt + timedelta(minutes=int(minutes))
                signal["valid_until"] = valid_until.isoformat()
            except Exception:
                pass

    return signal

BASE_DIR = Path(__file__).resolve().parent.parent  # /home/suprafl1/kleiner
DATA_DIR = BASE_DIR / "data"
LOG_DIR  = BASE_DIR / "logs"

DATA_PATH = DATA_DIR / "live_signals.json"
LOG_PATH  = LOG_DIR / "live_signal.log"

DATA_DIR.mkdir(exist_ok=True)
LOG_DIR.mkdir(exist_ok=True)

def log(msg):
    ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open(LOG_PATH, "a") as f:
        f.write(f"[{ts}] {msg}\n")


def load_data():
    if not os.path.exists(DATA_PATH):
        return {"updated_at": None, "signals": []}
    with open(DATA_PATH, "r") as f:
        return json.load(f)


def save_data(data):
    data["updated_at"] = datetime.now(timezone.utc).isoformat()
    with open(DATA_PATH, "w") as f:
        json.dump(data, f, indent=2)


def remove_expired(signals):
    now = datetime.now(timezone.utc)
    active = []

    for s in signals:
        valid_until = s.get("valid_until")

        # Wenn kein valid_until vorhanden → lieber aktiv lassen
        if not valid_until:
            active.append(s)
            continue

        try:
            vu = datetime.fromisoformat(valid_until.replace("Z", "+00:00"))
            if vu > now:
                active.append(s)
            else:
                s["status"] = "expired"
                # NICHT append!
        except Exception:
            # Wenn parsing kaputt → lieber aktiv lassen
            active.append(s)

    return active


def main():
    data = load_data()
    
    signals = [ensure_signal_lifecycle(s) for s in data.get("signals", [])]

    log("Live Signal Engine gestartet")

    # 1) Abgelaufene Signale entfernen
    signals = remove_expired(signals)

    data["signals"] = signals
    save_data(data)
    
    log(f"{len(signals)} aktive Signale gespeichert")


if __name__ == "__main__":
    main()
