#!/usr/bin/env python3
"""Serve the trading dashboard and state JSON from the outputs directory."""

from __future__ import annotations

import argparse
import http.server
import socket
import socketserver
from pathlib import Path


ROOT = Path(__file__).resolve().parent


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

    def end_headers(self) -> None:
        self.send_header("Cache-Control", "no-store")
        self.send_header("Access-Control-Allow-Origin", "*")
        super().end_headers()


def local_ip() -> str:
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        sock.settimeout(1)
        sock.connect(("8.8.8.8", 80))
        ip = sock.getsockname()[0]
        sock.close()
        return ip
    except Exception:
        return "127.0.0.1"


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--port", type=int, default=8765)
    args = parser.parse_args()

    ip = local_ip()
    local_url = f"http://127.0.0.1:{args.port}/trading_order_dashboard.html"
    lan_url = f"http://{ip}:{args.port}/trading_order_dashboard.html"
    (ROOT / "dashboard_link.local.txt").write_text(lan_url + "\n", encoding="utf-8")

    print("Trading dashboard server")
    print(f"Mac local: {local_url}")
    print(f"Phone same Wi-Fi: {lan_url}")
    print("For Kakao 상세보기 outside Wi-Fi, use a public tunnel/cloud URL and set KAKAO_DASHBOARD_URL.")

    class ReusableThreadingServer(socketserver.ThreadingTCPServer):
        allow_reuse_address = True

    with ReusableThreadingServer(("0.0.0.0", args.port), Handler) as httpd:
        httpd.serve_forever()


if __name__ == "__main__":
    raise SystemExit(main())
