"""Simple HTTP server for the BetterBrain Trends Dashboard.

Serve la cartella della dashboard + la cartella data.
Accessibile via Tailscale IP del Mac mini.

Run:
    cd ~/agents && uv run python -m projects.symetrics_trends.betterbrain.server

Default bind 0.0.0.0:8765 (config in config.yaml).
"""

from __future__ import annotations

import http.server
import socketserver
import sys
from pathlib import Path

import yaml


HERE = Path(__file__).resolve().parent
CONFIG_PATH = HERE / "config.yaml"


def main():
    with open(CONFIG_PATH) as f:
        cfg = yaml.safe_load(f)
    server_cfg = cfg.get("server", {})
    host = server_cfg.get("host", "0.0.0.0")
    port = int(server_cfg.get("port", 8765))

    # Serve la cartella betterbrain/ → la dashboard è a /dashboard/, i dati a /data/
    serve_dir = HERE

    class Handler(http.server.SimpleHTTPRequestHandler):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, directory=str(serve_dir), **kwargs)

        def end_headers(self):
            # Disable caching aggressivo per data/latest.json
            if self.path.endswith("latest.json") or "data/" in self.path:
                self.send_header("Cache-Control", "no-store, must-revalidate")
                self.send_header("Pragma", "no-cache")
                self.send_header("Expires", "0")
            super().end_headers()

        def log_message(self, format, *args):
            # Log meno verboso
            sys.stderr.write(f"[server] {self.address_string()} - {format % args}\n")

    socketserver.TCPServer.allow_reuse_address = True
    with socketserver.TCPServer((host, port), Handler) as httpd:
        print(f"[server] Serving BetterBrain Trends Dashboard on {host}:{port}")
        print(f"[server] Document root: {serve_dir}")
        print(f"[server] Dashboard URL: http://<TAILSCALE_IP>:{port}/dashboard/")
        print(f"[server] Data URL:      http://<TAILSCALE_IP>:{port}/data/latest.json")
        print(f"[server] Ctrl+C to stop.")
        try:
            httpd.serve_forever()
        except KeyboardInterrupt:
            print("\n[server] Stopped.")


if __name__ == "__main__":
    main()
