# shellcheck shell=bash

# bash wrappers around scripts/okstra_project resolver. okstra.sh 가 시작 시
# PROJECT_ROOT 를 확정하고 <PROJECT_ROOT>/.okstra/project.json 을
# upsert 한다. 과거 conf 파일 모델은 폐기되었다.

# 절대경로(또는 빈 문자열) 를 stdout 으로 출력한다. 실패 시 stderr 에 메시지를
# 남기고 비-0 종료. autofill 처럼 best-effort 호출자가 에러를 무시할 수 있도록
# strict/safe 두 종류를 분리한다.
resolve_project_root_strict() {
  local explicit="${1-}"
  python3 - "$OKSTRA_PYTHONPATH" "$explicit" <<'PY'
import os, sys
sys.path.insert(0, sys.argv[1])
from okstra_project import resolve_project_root, ResolverError
explicit = sys.argv[2] if len(sys.argv) > 2 else ""
try:
    p = resolve_project_root(explicit_root=explicit, cwd=os.getcwd())
except ResolverError as exc:
    sys.stderr.write(f"resolve_project_root: {exc}\n")
    sys.exit(1)
print(p)
PY
}

# 실패해도 0 으로 종료하고 stdout 은 빈 문자열(autofill 등 best-effort 경로용).
resolve_project_root_safe() {
  local explicit="${1-}"
  python3 - "$OKSTRA_PYTHONPATH" "$explicit" <<'PY'
import os, sys
sys.path.insert(0, sys.argv[1])
from okstra_project import resolve_project_root, ResolverError
explicit = sys.argv[2] if len(sys.argv) > 2 else ""
try:
    p = resolve_project_root(explicit_root=explicit, cwd=os.getcwd())
except ResolverError:
    sys.exit(0)
print(p)
PY
}

# project.json upsert. 충돌(projectId 불일치) 시 비-0 종료 + stderr 메시지.
upsert_project_json() {
  local project_root="$1"
  local project_id="$2"
  python3 - "$OKSTRA_PYTHONPATH" "$project_root" "$project_id" <<'PY'
import sys
sys.path.insert(0, sys.argv[1])
from pathlib import Path
from okstra_project import upsert_project_json, ResolverError
try:
    upsert_project_json(Path(sys.argv[2]), sys.argv[3])
except ResolverError as exc:
    sys.stderr.write(f"project.json upsert failed: {exc}\n")
    sys.exit(1)
PY
}

# `okstra setup` 이 이미 기록한 값을 다시 묻지 않기 위한 자동 채움. 프로젝트
# 안에서 실행하는 한 project-id 와 project-root 는 물어볼 것이 아니라 읽을 것이다.
autofill_from_project_json() {
  [[ -n "$PROJECT_ID" && -n "$PROJECT_ROOT" ]] && return 0
  local resolved
  resolved="$(python3 - "$OKSTRA_PYTHONPATH" "$PROJECT_ROOT_OVERRIDE" <<'PY' || true
import json, sys
from pathlib import Path
sys.path.insert(0, sys.argv[1])
from okstra_project import project_json_path
from okstra_project.resolver import resolve_project_root
try:
    root = resolve_project_root(explicit_root=sys.argv[2] or "")
except Exception:
    sys.exit(0)
path = project_json_path(Path(root))
if not path.is_file():
    sys.exit(0)
data = json.loads(path.read_text(encoding="utf-8"))
print(f"{data.get('projectId', '')}\t{root}")
PY
)"
  [[ -z "$resolved" ]] && return 0
  [[ -z "$PROJECT_ID" ]] && PROJECT_ID="${resolved%%$'\t'*}"
  [[ -z "$PROJECT_ROOT" ]] && PROJECT_ROOT="${resolved##*$'\t'}"
  return 0
}
