#!/usr/bin/env bash
# run-local.sh — 一键起本地后端（DB/Redis + 密钥 + 迁移 + seed + server）。
# 从项目根运行：  bash dev/run-local.sh
# 验证码：未配 SMTP，注册验证码会打到本终端的 server 日志里。
# 密钥：首次生成到 dev/.local/（gitignore）；标量密钥用固定/随机 dev 值，纯本地玩具。
set -euo pipefail

export PATH="/opt/homebrew/bin:$PATH"
ROOT="$PWD"
LOCAL="$ROOT/dev/.local"
mkdir -p "$LOCAL"

# ── 1. 起 MySQL + Redis ──────────────────────────────────────────────
echo "[run-local] 起 MySQL + Redis ..."
docker compose -f dev/docker-compose.yml up -d
echo "[run-local] 等待 MySQL 就绪 ..."
until docker exec pangolin-dev-mysql mysqladmin ping -proot --silent >/dev/null 2>&1; do
  sleep 1
done
echo "[run-local] MySQL 就绪。"

# ── 2. 生成密钥（仅当缺失）────────────────────────────────────────────
if [ ! -f "$LOCAL/jwt_private.pem" ]; then
  echo "[run-local] 生成 RS256 JWT 密钥对 ..."
  openssl genrsa -out "$LOCAL/jwt_private.pem" 2048
  openssl rsa -in "$LOCAL/jwt_private.pem" -pubout -out "$LOCAL/jwt_public.pem"
fi
[ -f "$LOCAL/webhook_secret" ] || openssl rand -hex 32 > "$LOCAL/webhook_secret"
[ -f "$LOCAL/derive_key" ]     || openssl rand -hex 32 > "$LOCAL/derive_key"

# ── 3. 组装环境变量 ──────────────────────────────────────────────────
read -r WEBHOOK_SECRET < "$LOCAL/webhook_secret"
read -r NODE_DERIVE_KEY < "$LOCAL/derive_key"
export WEBHOOK_SECRET NODE_DERIVE_KEY
export DB_DSN="root:root@tcp(127.0.0.1:13306)/pangolin?parseTime=true&loc=UTC&multiStatements=true"
export REDIS_ADDR="127.0.0.1:16379"
export JWT_PRIVATE_KEY_PATH="$LOCAL/jwt_private.pem"
export JWT_KEY_ID="dev-key-1"
export JWT_PUBLIC_KEYS="dev-key-1:$LOCAL/jwt_public.pem"
export ADDR=":18080"   # 避让本机已占用的 8080
# 真发邮件：dev/.local/smtp.env 存在则 source（设 SMTP_*）→ 后端用真 SMTP；
# 否则不设 SMTP_* → LogMailer 把验证码打日志。不设 GRPC_* → 不启 agent server。
# shellcheck disable=SC1091
[ -f "$LOCAL/smtp.env" ] && . "$LOCAL/smtp.env"

# ── 4. 迁移 + seed ───────────────────────────────────────────────────
echo "[run-local] 数据库迁移 ..."
( cd server && go run ./cmd/migrate up )
echo "[run-local] seed 节点 ..."
docker exec -i pangolin-dev-mysql mysql -uroot -proot pangolin < dev/seed.sql

# ── 5. 启动后端（前台，验证码看本终端日志）──────────────────────────
echo "[run-local] 启动后端 :18080 —— 注册验证码会打印在下方日志。Ctrl+C 停止。"
( cd server && go run ./cmd/server )
