#!/usr/bin/env python3
"""
WorkBuddy Monitor — 统一入口
=============================
用法:
    python run.py                    # 直接启动（默认）
    python run.py --proxy            # 同时启动 MITM 代理
    python run.py --port 5910        # 自定义端口
    python run.py --no-browser       # 不自动打开浏览器
"""
import os
import sys
import webbrowser
import argparse
import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    datefmt="%H:%M:%S",
)
log = logging.getLogger("wb-monitor")


def main():
    parser = argparse.ArgumentParser(
        description="WorkBuddy Monitor — Token 用量监控面板",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例:
  python run.py                    直接启动 Web 面板
  python run.py --proxy            同时启动 MITM 代理
  python run.py --port 8080        使用 8080 端口
  python run.py --no-browser       不自动打开浏览器
  python run.py --help             显示帮助
        """,
    )
    parser.add_argument(
        "--proxy", action="store_true",
        help="同时启动 LLM API MITM 代理（用于捕获 API 请求/响应）"
    )
    parser.add_argument(
        "--port", type=int, default=None,
        help="Web 面板端口（默认 5910）"
    )
    parser.add_argument(
        "--no-browser", action="store_true",
        help="不自动打开浏览器"
    )
    args = parser.parse_args()

    # Import monitor
    sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
    import monitor as m

    # Override port if specified
    if args.port:
        m.PORT = args.port

    # Start proxy if requested
    if args.proxy:
        import threading
        import importlib

        proxy_mod = importlib.import_module("llm_proxy")
        proxy_mod.DB_PATH = m.DB_PATH

        def _start_proxy():
            log.info("启动 MITM 代理 (端口 %d)...", proxy_mod.PROXY_PORT)
            proxy_mod.start_proxy()

        t = threading.Thread(target=_start_proxy, daemon=True)
        t.start()
        log.info("MITM 代理已在后台启动")
        log.info("  设置 HTTPS_PROXY=http://127.0.0.1:%d 使用代理", proxy_mod.PROXY_PORT)

    # Init DB & start watcher
    m.init_db()
    watcher = m.TraceWatcher()
    watcher.start()

    url = f"http://{m.HOST}:{m.PORT}"
    print(f"""
╔═══════════════════════════════════════════════╗
║        WorkBuddy Monitor v1.0                ║
║   Token 用量监控面板                          ║
╚═══════════════════════════════════════════════╝

  Dashboard: {url}
  Trace 目录: {m.TRACE_DIR}
  数据库:     {m.DB_PATH}
""")
    if args.proxy:
        print(f"  MITM 代理端口: {proxy_mod.PROXY_PORT}")
        print(f"  CA 证书路径:   {proxy_mod.CA_CERT_PATH}")
        print()

    if not args.no_browser:
        try:
            webbrowser.open(url)
        except Exception:
            pass

    # Start Flask app
    m.app.run(host=m.HOST, port=m.PORT, debug=False, use_reloader=False)


if __name__ == "__main__":
    main()
