#!/usr/bin/env python3
"""MASHTrialPulse CLI.

Usage:
    python3 main.py --offline --date 2026-04-26 --format md \\
        --output output/digest.md

본 도구는 연구·교육 목적의 참고용이며, 임상시험 등록·MASH 처방·임상
의사결정 근거로 사용할 수 없습니다. 모든 데이터는 합성(synthetic)입니다.
"""

from __future__ import annotations

import argparse
import sys
from datetime import date
from pathlib import Path

from mtpulse import differ
from mtpulse.digest import build_html, build_markdown
from mtpulse.snapshot import all_snapshots, list_loaded_files


def _parse_args(argv: list[str]) -> argparse.Namespace:
    p = argparse.ArgumentParser(
        prog="mashtrialpulse",
        description="MASH 신약 파이프라인·규제 일간 트래커 (synthetic data only)",
    )
    p.add_argument(
        "--offline",
        action="store_true",
        help="오프라인 모드 강제 (현재는 항상 오프라인). 외부 네트워크 호출 없음.",
    )
    p.add_argument(
        "--date",
        default=date.today().isoformat(),
        help="기준 날짜 (YYYY-MM-DD). 기본: 오늘",
    )
    p.add_argument(
        "--output",
        default="output/digest.md",
        help="출력 파일 경로",
    )
    p.add_argument(
        "--format",
        choices=("md", "html"),
        default="md",
        help="출력 포맷",
    )
    p.add_argument(
        "--self-check",
        action="store_true",
        help="differ 모듈 inline assertion 실행 후 종료",
    )
    return p.parse_args(argv)


def main(argv: list[str] | None = None) -> int:
    args = _parse_args(argv if argv is not None else sys.argv[1:])

    if args.self_check:
        differ._self_check_new_trial_detection()
        print("[self-check] differ.new_trial detection: OK")
        return 0

    # network guard (cosmetic — 코드는 절대 외부 호출하지 않음)
    if not args.offline:
        print("[warn] --offline 미지정. 본 도구는 항상 오프라인 모드로만 동작합니다.")

    snapshot_date = args.date
    snapshots = all_snapshots(snapshot_date)
    buckets = differ.collect_all(snapshots)

    if args.format == "md":
        body = build_markdown(buckets, snapshot_date)
    else:
        body = build_html(buckets, snapshot_date)

    out_path = Path(args.output)
    out_path.parent.mkdir(parents=True, exist_ok=True)
    out_path.write_text(body, encoding="utf-8")

    total_events = sum(len(v) for v in buckets.values())
    files = list_loaded_files(snapshot_date)
    print(f"[ok] digest -> {out_path} ({args.format})")
    print(f"[ok] events: {total_events}")
    print(f"[ok] sources loaded: {len(files)} synthetic JSON files")
    return 0


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