"""`okstra task-show` 의 프로젝션 — 한 task 의 매니페스트·워크플로 상태 요약.

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

import argparse
import json
from pathlib import Path

from okstra_project import (
    ResolverError,
    StateError,
    resolve_project_root,
    task_read_side_snapshot,
)


_CLI_EPILOG = r"""Usage:
  okstra task-show <task-key>                  task-key is project-id:task-group:task-id
  okstra task-show <task-key> --cwd <dir>      Resolve PROJECT_ROOT from <dir>
  okstra task-show <task-key> --project <dir>  Use <dir> directly as PROJECT_ROOT

Output: JSON with taskKey, taskType, taskRoot, brief path, workflow phases,
artifacts, modelAssignments, latestRunPath.
"""
_CLI_DESCRIPTION = "Summarize a task's manifest and workflow state."


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(
        description=_CLI_DESCRIPTION,
        epilog=_CLI_EPILOG,
        formatter_class=argparse.RawDescriptionHelpFormatter,
        prog="okstra task-show")
    parser.add_argument("task_key", metavar="task-key",
                        help="project-id:task-group:task-id")
    parser.add_argument("--project-root", "--project", default="",
                        help="use this directory as PROJECT_ROOT")
    parser.add_argument("--cwd", default=".",
                        help="resolve PROJECT_ROOT starting from here")
    args = parser.parse_args(argv)

    try:
        resolved = resolve_project_root(explicit_root=args.project_root, cwd=args.cwd)
    except ResolverError as exc:
        print(json.dumps({"ok": False, "stage": "resolve", "reason": str(exc)}))
        return 2

    try:
        snapshot = task_read_side_snapshot(Path(resolved), args.task_key)
    except StateError as exc:
        print(json.dumps({
            "ok": False,
            "stage": getattr(exc, "stage", None) or "task_snapshot",
            "reason": str(exc),
        }))
        return 1

    print(json.dumps({"ok": True, **snapshot}, ensure_ascii=False, default=str, indent=2))
    return 0


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