#!/usr/bin/env python3
"""dosed — DailyDose CLI entry tool (example template)"""

import sys, json, re, urllib.request, urllib.error
from datetime import datetime, timezone, timedelta

API = "http://localhost:8765/api/data"

CATS = [
    ("Schlafen", "😴"), ("Unterwegs", "🚗"), ("Islam", "🕌"),
    ("Lernen", "📚"), ("Youtube", "📺"), ("Kochen", "🍳"),
    ("Hausarbeit", "🧹"), ("Buildtech", "🔧"), ("Zocken", "🎮"),
    ("Uni", "🏫"), ("Tiktok", "🎵"), ("Familie", "♥️"), ("Work", "💼"),
]

def today_key():
    d = datetime.now(timezone(timedelta(hours=2)))
    return f"PREFIX_{d.year}-{d.month:02d}-{d.day:02d}"

def show_cats():
    for i, (cat, icon) in enumerate(CATS, 1):
        print(f"  {i:2d}. {icon} {cat}")

def parse_time(text):
    m = re.match(r'(\d+(?:\.\d+)?)\s*(?:h|stunden?)', text, re.I)
    if m: return round(float(m.group(1)), 2)
    m = re.match(r'(\d+)\s*(?:min|m|minuten?)', text, re.I)
    if m: return round(int(m.group(1)) / 60, 2)
    return None

def load_from_server(key):
    try:
        with urllib.request.urlopen(API) as r:
            data = json.loads(r.read().decode())
            raw = data.get(key)
            return json.loads(raw) if raw else []
    except Exception:
        return []

def post(data):
    payload = json.dumps(data).encode()
    req = urllib.request.Request(API, data=payload, headers={"Content-Type": "application/json"}, method="POST")
    try:
        with urllib.request.urlopen(req) as r:
            return r.status == 200
    except urllib.error.HTTPError:
        return False

def main():
    show_cats()
    print("\nFormat: NUMMER ZEIT  (z.B. '4 2h' oder '3 30min')")
    print("Mehrere mit Komma/Leerzeichen: 4 2h, 3 30min, 10 1.5h")
    print("Fertig: ENTER\n")

    entries = []
    while True:
        line = input("> ").strip()
        if not line:
            break
        parts = re.split(r',\s*|\s+', line)
        i = 0
        while i < len(parts):
            if parts[i].isdigit():
                idx = int(parts[i]) - 1
                if 0 <= idx < len(CATS):
                    cat = CATS[idx][0]
                    i += 1
                    if i < len(parts):
                        t = parse_time(parts[i])
                        if t is not None:
                            existing = next((e for e in entries if e["category"] == cat), None)
                            if existing:
                                existing["hours"] = round(existing["hours"] + t, 2)
                            else:
                                entries.append({"category": cat, "hours": t})
                            print(f"  -> {cat}: {t}h")
                        else:
                            print(f"  X Zeit nicht erkannt: {parts[i]}")
                    else:
                        print("  X Zeit fehlt")
                else:
                    print(f"  X Ungültige Nummer: {parts[i]}")
            i += 1

    if not entries:
        print("Keine Einträge. Abbruch."); sys.exit(0)

    key = today_key()
    if post({key: json.dumps(entries)}):
        total = sum(e["hours"] for e in entries)
        print(f"\nOK -> {key}: {len(entries)} Einträge, {total}h total")
        for e in entries:
            print(f"  {e['category']}: {e['hours']}h")
    else:
        print("\nX Speichern fehlgeschlagen"); sys.exit(1)

if __name__ == "__main__":
    main()
