#!/usr/bin/env bash
# agent-start: Slack 에이전트 세션을 tmux + claude + agent-bootstrap 스킬로 한 번에 기동
# 사용법:  agent-start <이름>
# 예시:    agent-start 포도

set -e

NAME="${1:-}"
CHANNEL="${AGENT_SLACK_CHANNEL:-#lab-agents}"

# ── 이름 인자 강제 ──────────────────────────────────────────
if [ -z "$NAME" ]; then
  cat <<'EOF' >&2

[agent-start] 에러: 에이전트 이름이 필요합니다.

사용법:
  agent-start <이름>

예시:
  agent-start 포도
  agent-start 머루
  agent-start 키위

이름은 한글 1~4자 또는 영문 2~10자를 추천합니다.
다시 입력해 주세요.

EOF
  exit 1
fi

# ── 이름 유효성 간단 검증 ──────────────────────────────────
# 공백·따옴표·슬래시 금지
if [[ "$NAME" =~ [[:space:]\"\'/\\] ]]; then
  echo "[agent-start] 에러: 이름에 공백·따옴표·슬래시는 쓸 수 없습니다." >&2
  exit 1
fi

# ── tmux 세션 이름 충돌 체크 ───────────────────────────────
if tmux has-session -t "$NAME" 2>/dev/null; then
  echo "[agent-start] 경고: '$NAME' 이름의 tmux 세션이 이미 존재합니다." >&2
  echo "              tmux attach -t $NAME  로 들어가거나," >&2
  echo "              tmux kill-session -t $NAME  으로 종료 후 재실행하세요." >&2
  exit 1
fi

# ── claude 실행 파일 확인 ──────────────────────────────────
if ! command -v claude >/dev/null 2>&1; then
  echo "[agent-start] 에러: 'claude' 명령을 찾을 수 없습니다." >&2
  echo "              Claude Code가 설치되어 있고 PATH에 있는지 확인하세요." >&2
  exit 1
fi

# ── tmux 새 세션 기동 ──────────────────────────────────────
HOST="$(hostname -s 2>/dev/null || hostname)"
STARTED_AT="$(date '+%Y-%m-%d %H:%M:%S %Z')"

echo "[agent-start] tmux 세션 생성: $NAME (host=$HOST)"
echo "[agent-start] 채널: $CHANNEL"
echo "[agent-start] 시작: $STARTED_AT"
echo

# tmux 안에서 claude를 띄우고, 부트스트랩 프롬프트를 자동 입력
# - 프롬프트가 agent-bootstrap 스킬을 트리거하도록 설계됨
BOOTSTRAP_PROMPT="agent-bootstrap 스킬로 이 세션을 에이전트 '${NAME}'으로 세팅해줘. \
호스트: ${HOST}. 채널: ${CHANNEL}. \
이름에 어울리는 이모지를 골라 확정하고, 시스템 프롬프트 주입·Slack 기상 알림·/loop 1m·2시간 alive cron을 전부 설정해."

tmux new-session -d -s "$NAME" \
  "claude '${BOOTSTRAP_PROMPT//\'/\'\\\'\'}'"

echo "[agent-start] ✓ 에이전트 '$NAME' 세션 기동 완료."
echo "              tmux attach -t $NAME     (들어가기)"
echo "              Ctrl+B, D                (빠져나오기)"
echo "              Slack $CHANNEL 에서 '${NAME}야 ...' 로 호출 가능 (약 1분 뒤부터)"
