#!/usr/bin/env bash
# install-launchd.sh — Asurada 데몬을 launchd LaunchAgent 로 등록.
#
# user_id 와 database_url 은 `~/.asurada/config.toml` 에서 관리.
# 이 스크립트는 binary 경로 + PATH 만 plist 에 박는다.
#
# 사용:
#   asurada init              # config 생성 (UUID 발급, db url 설정)
#   ./install-launchd.sh      # 데몬 등록
#
# 재실행 시 idempotent.

set -euo pipefail

LABEL="dev.webchemist.asurada"
PLIST_DIR="$HOME/Library/LaunchAgents"
PLIST="$PLIST_DIR/${LABEL}.plist"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
TEMPLATE="$SCRIPT_DIR/${LABEL}.plist"

# 1. asurada 바이너리
BIN="$(command -v asurada || true)"
if [[ -z "$BIN" ]]; then
  echo "❌ asurada 바이너리를 찾을 수 없습니다." >&2
  echo "   cargo install --path $(cd "$SCRIPT_DIR/.." && pwd)" >&2
  echo "   또는 brew install webchemistcorp/asurada/asurada" >&2
  exit 1
fi

# 2. config 검증 — `asurada init` 이 먼저 실행되어 있어야 함.
CONFIG="$HOME/.asurada/config.toml"
if [[ ! -f "$CONFIG" ]]; then
  echo "❌ $CONFIG 가 없습니다." >&2
  echo "   먼저 다음을 실행하세요:" >&2
  echo "       asurada init" >&2
  exit 1
fi

mkdir -p "$PLIST_DIR"

# 3. plist 템플릿 치환 (binary 경로 + PATH 만)
echo "▶ LaunchAgent plist 생성..."
sed \
  -e "s|__BIN__|${BIN}|g" \
  -e "s|__HOME__|${HOME}|g" \
  -e "s|__PATH__|${PATH}|g" \
  "$TEMPLATE" > "$PLIST"

# 4. 기존 등록 제거 후 다시 로드 (idempotent)
echo "▶ launchd 등록..."
launchctl bootout "gui/$(id -u)/$LABEL" 2>/dev/null || true
launchctl bootstrap "gui/$(id -u)" "$PLIST"
launchctl enable "gui/$(id -u)/$LABEL"

# 5. config 의 user.id 출력
USER_ID=$(awk -F'"' '/^id[[:space:]]*=/{print $2; exit}' "$CONFIG" 2>/dev/null || echo "?")

echo ""
echo "✓ 아스라다가 깨어났습니다 🌟"
echo "  데몬:    http://127.0.0.1:7878"
echo "  user.id: $USER_ID"
echo "  config:  $CONFIG"
echo "  로그:    ~/.asurada/asurada.out.log"
echo "  중지:    launchctl bootout gui/$(id -u)/$LABEL"
echo "  재시작:  launchctl kickstart -k gui/$(id -u)/$LABEL"
