# shellcheck shell=bash

# scripts/okstra_project 리졸버의 bash 래퍼. okstra.sh 가 시작 시 PROJECT_ROOT 를
# 확정하고 <PROJECT_ROOT>/.okstra/project.json 을 upsert 한다. 과거 conf 파일
# 모델은 폐기되었다.
#
# 해석 자체는 `okstra_ctl.project_setup_cli` 한 곳에만 있다. 예전에는 이 파일이
# 파이썬 heredoc 4개로 같은 해석을 다시 적었고, TS 쪽(config/setup/check-project)
# 도 각자 한 벌씩 더 갖고 있었다 — 갈라져도 아무도 몰랐다.

# PYTHONPATH 는 호출 시점의 $OKSTRA_PYTHONPATH 를 앞에 둔다(설치본/레포 양쪽).
_okstra_project_cli() {
  PYTHONPATH="${OKSTRA_PYTHONPATH}${PYTHONPATH:+:$PYTHONPATH}" \
    python3 -m okstra_ctl.project_setup_cli "$@"
}

# 절대경로를 stdout 으로. 실패 시 stderr 에 메시지를 남기고 비-0 종료.
resolve_project_root_strict() {
  _okstra_project_cli resolve-root \
    --explicit-root "${1-}" --cwd "$PWD" \
    --on-error fail --error-prefix "resolve_project_root: " --error-code 1
}

# 실패해도 0 으로 종료하고 stdout 은 빈 문자열(autofill 등 best-effort 경로용).
resolve_project_root_safe() {
  _okstra_project_cli resolve-root \
    --explicit-root "${1-}" --cwd "$PWD" --on-error empty
}

# project.json upsert. 충돌(projectId 불일치) 시 비-0 종료 + stderr 메시지.
upsert_project_json() {
  _okstra_project_cli upsert \
    --project-root "$1" --project-id "$2" --format strict
}

# `okstra setup` 이 이미 기록한 값을 다시 묻지 않기 위한 자동 채움. 프로젝트
# 안에서 실행하는 한 project-id 와 project-root 는 물어볼 것이 아니라 읽을 것이다.
autofill_from_project_json() {
  [[ -n "$PROJECT_ID" && -n "$PROJECT_ROOT" ]] && return 0
  local resolved
  resolved="$(_okstra_project_cli project-json \
    --explicit-root "$PROJECT_ROOT_OVERRIDE" || true)"
  [[ -z "$resolved" ]] && return 0
  [[ -z "$PROJECT_ID" ]] && PROJECT_ID="${resolved%%$'\t'*}"
  [[ -z "$PROJECT_ROOT" ]] && PROJECT_ROOT="${resolved##*$'\t'}"
  return 0
}
