#!/usr/bin/env python3
"""scripts.run_branch_ref_allocator — task-2553+9 CLI (회장 §11-4).

repo / base name / base_sha 입력 → collision-safe allocated branch name +
9-R.6 provenance JSON 출력. **read-only** (git-write 부작용 0). isolated
worktree 경로는 runner 가 self-manage 하므로 인자 미수신 (9-R.2).

usage:
  python3 scripts/run_branch_ref_allocator.py \\
      --repo /home/jay/workspace \\
      --base-name task/task-2553p1-f1-clean-replacement \\
      --base-sha 7346df8260803308df30a6d04ec32d66d4cdfa5b \\
      [--out memory/events/task-2553+9.activation-decision.json] \\
      [--max-attempts 8]
"""

from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path

_WS = Path(__file__).resolve().parents[1]
if str(_WS) not in sys.path:
    sys.path.insert(0, str(_WS))

from anu_v3.branch_ref_allocator import (  # noqa: E402
    DEFAULT_MAX_ATTEMPTS,
    STATUS_ALLOCATED,
    allocate_branch,
)


def main(argv: list[str] | None = None) -> int:
    ap = argparse.ArgumentParser(description="collision-safe branch allocator")
    ap.add_argument("--repo", required=True)
    ap.add_argument("--base-name", required=True)
    ap.add_argument("--base-sha", required=True)
    ap.add_argument("--max-attempts", type=int, default=DEFAULT_MAX_ATTEMPTS)
    ap.add_argument("--out", default=None)
    ns = ap.parse_args(argv)

    prov = allocate_branch(
        ns.repo,
        ns.base_name,
        base_sha=ns.base_sha,
        max_attempts=ns.max_attempts,
    )
    text = json.dumps(prov, indent=2, ensure_ascii=False)
    if ns.out:
        Path(ns.out).write_text(text + "\n", encoding="utf-8")
    print(text)
    return 0 if prov.get("status") == STATUS_ALLOCATED else 2


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