# 격리 스택 공통 설정. 다른 스크립트가 source 해서 쓴다 (직접 실행하지 않는다).
# 저장소 추적 파일은 건드리지 않는다. 모든 산출 · 비밀은 이 디렉터리(L) 아래에만 쓴다.

WT=/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac
L=/home/madsc/work/insuniverse-temp/.git/worktrees/admin-rbac/live
# 스키마 · 저장 함수 원본 (읽기만). 격리 덤프는 stg 에서 떴고 데이터 0행이다.
SCHEMA_DIR=/home/madsc/work/security-review/insuniverse-isolated/initdb

OFF_SRV=$WT/.worktrees/rbac-live-off-srv
ON_SRV=$WT/.worktrees/rbac-live-on-srv
OFF_ADM=$WT/.worktrees/rbac-live-off-adm
ON_ADM=$WT/.worktrees/rbac-live-on-adm

DB_NAME=rbac-live-mysql
REDIS_NAME=rbac-live-redis
DB_PORT=13392
REDIS_PORT=16392

SRV_OFF_PORT=7201
SRV_ON_PORT=7202
ADM_OFF_PORT=5227
ADM_ON_PORT=5327
PROXY_OFF_PORT=5197
PROXY_ON_PORT=5297

# systemd --user 유닛 6개 (DB · Redis 는 docker 컨테이너)
UNITS="rbac-live-srv-off rbac-live-srv-on rbac-live-adm-off rbac-live-adm-on rbac-live-proxy-off rbac-live-proxy-on"

# 계정표 · 접속 안내 (0600). 실행마다 새로 쓴다.
ACCOUNTS_TXT=$L/accounts.txt
ACCOUNTS_TSV=$L/.accounts.tsv

# 한 유닛에 주는 상한 (메모 vm-memory-budget-playwright)
unit_run() {
  # 사용: unit_run <유닛 이름> <작업 디렉터리> <명령...>
  local name=$1 wd=$2; shift 2
  systemd-run --user --unit="$name" --working-directory="$wd" --collect --setenv=PATH="$PATH" \
    -p MemoryMax=3G -p MemorySwapMax=0 \
    -p StandardOutput="append:$L/logs/$name.log" -p StandardError="append:$L/logs/$name.log" \
    "$@" >/dev/null
}

unit_active() { systemctl --user is-active --quiet "$1.service"; }

port_listening() { ss -Hltn "sport = :$1" | grep -q .; }

wait_http() {
  # 사용: wait_http <URL> <초>
  local url=$1 secs=$2 i
  for i in $(seq 1 "$secs"); do
    curl -s -o /dev/null --max-time 2 "$url" && return 0
    sleep 1
  done
  return 1
}

load_env_live() {
  [ -f "$L/.env.live" ] || { echo "$L/.env.live 가 없다" >&2; return 1; }
}
