#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""법원경매 자동분석 파이프라인 진입점

사용법:
  python run.py crawl        # 01:00 물건 수집 + 실거래가
  python run.py score        # 03:00 필터링/스코어링
  python run.py risk         # 04:00 LLM 권리분석
  python run.py roi          # 06:00 수익률 계산
  python run.py report       # 07:30 PDF 보고서 생성
  python run.py send         # 08:00 이메일 발송
  python run.py healthcheck  # 08:15 발송 확인 경보
  python run.py all          # 전체 순차 실행 (테스트용)
"""
import sys, traceback


def main():
    if len(sys.argv) < 2:
        print(__doc__)
        sys.exit(1)
    stage = sys.argv[1]

    try:
        if stage == "crawl":
            from crawler import court_auction, molit_api
            court_auction.run()
            molit_api.run()
        elif stage == "score":
            from analysis import scorer
            scorer.run()
        elif stage == "risk":
            from analysis import risk_llm
            risk_llm.run()
        elif stage == "roi":
            from analysis import roi
            roi.run()
        elif stage == "report":
            from report import builder
            builder.run()
        elif stage == "send":
            from report import mailer
            mailer.run()
        elif stage == "healthcheck":
            from report.mailer import healthcheck
            healthcheck()
        elif stage == "all":
            for s in ["crawl", "score", "risk", "roi", "report", "send"]:
                print(f"\n===== {s} =====")
                sys.argv[1] = s
                try:
                    main_stage(s)
                except Exception as e:
                    print(f"[WARN] {s} 실패, 다음 단계 계속: {e}")
        else:
            print(f"알 수 없는 단계: {stage}")
            print(__doc__)
            sys.exit(1)
    except Exception:
        traceback.print_exc()
        sys.exit(1)


def main_stage(stage):
    mod_map = {
        "crawl": lambda: (__import__("crawler.court_auction", fromlist=["run"]).run(),
                          __import__("crawler.molit_api", fromlist=["run"]).run()),
        "score": lambda: __import__("analysis.scorer", fromlist=["run"]).run(),
        "risk": lambda: __import__("analysis.risk_llm", fromlist=["run"]).run(),
        "roi": lambda: __import__("analysis.roi", fromlist=["run"]).run(),
        "report": lambda: __import__("report.builder", fromlist=["run"]).run(),
        "send": lambda: __import__("report.mailer", fromlist=["run"]).run(),
    }
    mod_map[stage]()


if __name__ == "__main__":
    main()
