"""`okstra doctor` 가 부르는 진단 프로젝션.

진단 로직 자체는 `okstra_ctl.doctor` 에 있다. 이 모듈은 그것을 CLI 경계로
노출하기만 한다 — 원래 `src/commands/lifecycle/doctor.mts` 의 문자열 리터럴
안에 있던 두 스니펫을 옮긴 것이다(docs/coding-rules.md R1 위반).
"""
from __future__ import annotations

import argparse
import json

from .doctor import model_pool_diagnostics, phase_diagnostics


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(prog="okstra doctor")
    sub = parser.add_subparsers(dest="op", required=True)

    pool = sub.add_parser("model-pool")
    pool.add_argument("--host-runtime", default="claude-code")
    pool.add_argument("--cwd", required=True)

    phase = sub.add_parser("phase")
    phase.add_argument("--phase", required=True)
    phase.add_argument("--cwd", required=True)
    phase.add_argument("--workspace-root", required=True)
    # `--home` 은 사용자 홈이다. 에이전트 설치 루트가 `<home>/.claude/agents` 라서
    # okstra 홈(~/.okstra)을 넘기면 모든 worker-agent 점검이 없는 경로를 짚는다.
    phase.add_argument("--home", required=True)
    phase.add_argument("--host-runtime", default="")

    args = parser.parse_args(argv)
    if args.op == "model-pool":
        payload = model_pool_diagnostics(host_runtime=args.host_runtime, cwd=args.cwd)
    else:
        payload = phase_diagnostics(
            args.phase,
            cwd=args.cwd,
            workspace_root=args.workspace_root,
            home=args.home,
            host_runtime=args.host_runtime,
        )
    print(json.dumps(payload, ensure_ascii=False))
    return 0


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