"""`okstra plan-validate` 의 프로젝션 — 승인 계획 문서의 구조 검증.

원래 `src/commands/execute/plan-validate.mts` 의 문자열 리터럴 안에 있던 코드다
(docs/coding-rules.md R1 위반). 로직은 그대로 옮겼다.
"""
from __future__ import annotations

import argparse
import json


_CLI_EPILOG = r"""Usage:
  okstra plan-validate <plan-path>

Output: JSON { ok: true, planPath } on success.
On failure: { ok: false, reason } with non-zero exit code.

Use this in flows that need to confirm a plan was approved without invoking
the full prepare_task_bundle pipeline.
"""
_CLI_DESCRIPTION = "Verify an approved-plan file has a recognised approval marker."


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(
        description=_CLI_DESCRIPTION,
        epilog=_CLI_EPILOG,
        formatter_class=argparse.RawDescriptionHelpFormatter,
        prog="okstra plan-validate")
    parser.add_argument("plan_path", metavar="plan-path")
    args = parser.parse_args(argv)

    # run.py 는 무거운 모듈이라 import 시점을 이 함수 안으로 미룬다 —
    # `--help` 만 부르는 호출에 prepare 전체를 적재하지 않기 위해서다.
    from .run import PrepareError, _validate_approved_plan

    try:
        _validate_approved_plan(args.plan_path)
    except PrepareError as exc:
        print(json.dumps({
            "ok": False, "stage": "validation",
            "reason": str(exc), "planPath": args.plan_path,
        }))
        return 1

    print(json.dumps({"ok": True, "planPath": args.plan_path}))
    return 0


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