"""
录制单个 LPL/LOL Polymarket 市场的完整 CLOB orderbook。

手动停止：Ctrl+C。

示例：
    python3 scripts/record_lpl_orderbook.py --slug lol-lgd-edg-2026-04-23-game1
"""
from __future__ import annotations

import asyncio
import os
import signal
import sys
from pathlib import Path

import click
from dotenv import load_dotenv
from loguru import logger

ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if ROOT not in sys.path:
    sys.path.insert(0, ROOT)

from analysis.lpl_orderbook.recorder import LplOrderbookRecorder  # noqa: E402


def _setup_logging() -> None:
    logger.remove()
    logger.add(
        sys.stderr,
        level=os.environ.get("LOG_LEVEL", "INFO").upper(),
        format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level:<7}</level> | {message}",
        colorize=True,
    )


@click.command()
@click.option("--slug", required=True, help="要录制的单个 Polymarket market slug")
@click.option(
    "--output-root",
    default="data/lpl",
    show_default=True,
    type=click.Path(file_okay=False, path_type=Path),
    help="JSONL 输出根目录",
)
@click.option(
    "--snapshot-interval-seconds",
    default=1.0,
    show_default=True,
    type=float,
    help="周期完整 orderbook snapshot 间隔",
)
@click.option("--insecure-ssl", is_flag=True, help="关闭 HTTPS 证书校验，仅用于本机 CA 缺失时调试")
def main(
    slug: str,
    output_root: Path,
    snapshot_interval_seconds: float,
    insecure_ssl: bool,
) -> None:
    load_dotenv()
    _setup_logging()
    recorder = LplOrderbookRecorder(
        slug=slug,
        output_root=output_root,
        snapshot_interval_seconds=snapshot_interval_seconds,
        insecure_ssl=insecure_ssl,
    )

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    for sig in (signal.SIGINT, signal.SIGTERM):
        loop.add_signal_handler(sig, recorder.stop)

    logger.info(f"开始录制 LPL orderbook: slug={slug}")
    try:
        loop.run_until_complete(recorder.run())
    finally:
        loop.close()
    logger.info(f"录制已停止: slug={slug}")


if __name__ == "__main__":
    main()
