#!/usr/bin/env python3
"""ObesityPharmaWatch — quarterly obesity pharma abstract roundup CLI.

본 도구는 연구·교육 목적의 참고용이며, 비만약물 처방·임상 의사결정 근거로 사용할 수 없습니다.
모든 데이터는 합성된 mock 데이터입니다.
"""

import argparse
import sys
from pathlib import Path

from opwatch import adapters, classifier, linker, report, vocab


def build_parser():
    p = argparse.ArgumentParser(
        prog="obesity-pharma-watch",
        description=(
            "비만약물 학회 abstract + ClinicalTrials.gov 분기 라운드업 리포트 생성. "
            "외부 네트워크 호출 없이 mock 데이터만 사용한다."
        ),
    )
    p.add_argument(
        "--offline",
        action="store_true",
        help="Use bundled mock data (the only supported mode).",
    )
    p.add_argument(
        "--quarter",
        type=str,
        default=None,
        help="Filter to a specific quarter, e.g. 2026-Q2. Omit for all quarters.",
    )
    p.add_argument(
        "--output",
        type=str,
        default="output/report.html",
        help="Output HTML file path (default: output/report.html).",
    )
    p.add_argument(
        "--list-drugs",
        action="store_true",
        help="Print the curated obesity drug vocabulary and exit.",
    )
    return p


def cmd_list_drugs():
    print(f"# ObesityPharmaWatch curated vocabulary ({vocab.total_drug_count()} drugs)")
    print("# 참고용 목록일 뿐 임상 권고나 처방 근거가 아닙니다.")
    for entry in vocab.DRUG_VOCAB:
        print(f"- {entry['canonical']:32s}  targets={','.join(entry['targets']):20s}"
              f"  sponsor={entry['sponsor']}")


def main(argv=None):
    args = build_parser().parse_args(argv)

    if args.list_drugs:
        cmd_list_drugs()
        return 0

    if not args.offline:
        print("[INFO] --offline not specified; defaulting to offline mode "
              "(no network mode is supported).", file=sys.stderr)

    # 1. Load all conference abstracts.
    abstracts_raw = adapters.load_all(offline=True)
    # 2. Load CTG trials.
    trials = adapters.load_ctg_trials(offline=True)
    # 3. Classify abstracts (drug/target/sponsor/phase).
    abstracts = classifier.classify_all(abstracts_raw)
    # 4. Link to CTG trials.
    abstracts = linker.link_all(abstracts, trials)
    # 5. Render HTML report.
    html = report.render_report(abstracts, quarter=args.quarter)

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

    n = len(report.filter_by_quarter(abstracts, args.quarter))
    print(f"[OK] wrote {out_path}  ({n} abstracts after quarter filter)")
    return 0


if __name__ == "__main__":
    sys.exit(main())
