#!/usr/bin/env bash
# up.sh — 가짜 토스 → 서버 → vite 2 → 접속 프록시 2 순서로 띄운다.
# 각 프로세스는 env -i 로 시작한다. 서버만 server.env 를 얹고, vite 는 자기 .env 만 읽는다.
# PID 는 기동 때 $! 로 pids/<이름>.pid 에 받는다. 이름 패턴으로 찾지 않는다.
set -euo pipefail
umask 077
LS=/home/madsc/work/insuniverse-temp/.git/worktrees/security-hotfix/live-stack
LOGS=$LS/logs
PIDS=$LS/pids
ENVRUN=$LS/envrun.sh
mkdir -p "$LOGS" "$PIDS"

busy() { ss -H -ltn "sport = :$1" | grep -q .; }
for p in 7239 7231 5231 5232 5233 5234; do
  if busy "$p"; then
    echo "port $p is busy, abort" >&2
    exit 1
  fi
done
if [[ "$(docker inspect -f '{{.State.Status}}' secfix-live-mysql 2>/dev/null || true)" != running ]]; then
  echo "container secfix-live-mysql is not running, abort" >&2
  exit 1
fi

# launch <name> <dir> <env-file|/dev/null> <command...>
launch() {
  local name=$1 dir=$2 envf=$3
  shift 3
  ( cd "$dir" && exec setsid nohup env -i PATH="$PATH" HOME="$HOME" "$ENVRUN" "$envf" "$@" ) \
    > "$LOGS/$name.log" 2>&1 < /dev/null &
  echo $! > "$PIDS/$name.pid"
  echo "started $name pid $(cat "$PIDS/$name.pid")"
}

launch fake-toss "$LS" /dev/null node "$LS/fake-toss.js"
launch server "$LS/server" "$LS/server.env" node -r "$LS/preload.js" "$LS/server/dist/apps/api/apps/api/src/main.js"
launch site-vite "$LS/site/front" /dev/null node node_modules/vite/bin/vite.js --host 127.0.0.1 --port 5231 --strictPort
launch admin-vite "$LS/admin" /dev/null node node_modules/vite/bin/vite.js --host 127.0.0.1 --port 5233 --strictPort
launch proxy-site "$LS" /dev/null node "$LS/proxy.js" site
launch proxy-admin "$LS" /dev/null node "$LS/proxy.js" admin
