#!/usr/bin/env python3
"""GLP1AESignal-Kor CLI 진입점.

참고용·연구용 — Not for clinical decision.

Usage:
    python3 main.py --help
    python3 main.py --demo
    python3 main.py --demo --export RMP PSUR
"""
from __future__ import annotations

import argparse
import sys


def build_parser() -> argparse.ArgumentParser:
    p = argparse.ArgumentParser(
        prog="glp1ae-signal-kor",
        description=("GLP-1RA/tirzep/retatrutide AE signal panel + FAERS "
                     "disproportionality + DSC quarterly report. "
                     "참고용·연구용 — Not for clinical decision."),
    )
    p.add_argument("--demo", action="store_true",
                   help="합성 데이터로 demo summary 출력")
    p.add_argument("--export", nargs="+", choices=["RMP", "PSUR", "DSUR", "JSON"],
                   default=[],
                   help="reports/ 디렉토리로 모듈 docx 초안 (또는 JSON) export")
    p.add_argument("--quarter", type=str, default=None,
                   help="Quarter label (e.g. 2026Q2). 미지정시 오늘 기준 자동")
    p.add_argument("--ae", type=str, default=None, help="AE CSV path 오버라이드")
    p.add_argument("--labs", type=str, default=None, help="Labs CSV path 오버라이드")
    p.add_argument("--faers", type=str, default=None, help="FAERS CSV path 오버라이드")
    return p


def cmd_demo(args: argparse.Namespace) -> int:
    # Defer heavy imports to here so --help works without dependencies.
    try:
        from modules.ingest import load_ae, load_labs, auto_map_ae_freetext, ingest_summary
        from modules.report import (build_quarterly_summary, render_text_summary,
                                    write_dsc_quarterly_json, write_module_docx)
    except Exception as e:
        print(f"[ERROR] import failed (의존성 설치 필요할 수 있음): {e}", file=sys.stderr)
        return 2

    ae = load_ae(args.ae)
    labs = load_labs(args.labs)
    ae = auto_map_ae_freetext(ae)
    isum = ingest_summary(ae)
    print(f"[INGEST] N events={isum['n_events']} serious={isum['serious']}")
    print(f"[INGEST] by_arm={isum['by_arm']}")
    print(f"[INGEST] by_panel={isum['by_panel']}")

    summary = build_quarterly_summary(ae, labs, faers_path=args.faers,
                                      quarter_label=args.quarter)
    print(render_text_summary(summary))

    if "JSON" in args.export:
        path = write_dsc_quarterly_json(summary)
        print(f"[EXPORT] DSC JSON -> {path}")
    for mod in ("RMP", "PSUR", "DSUR"):
        if mod in args.export:
            path = write_module_docx(summary, module=mod)
            print(f"[EXPORT] {mod} -> {path}")
    return 0


def main(argv: list[str] | None = None) -> int:
    parser = build_parser()
    args = parser.parse_args(argv)
    if args.demo:
        return cmd_demo(args)
    parser.print_help()
    return 0


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