#!/usr/bin/env bash
# OpenIM + LiveKit 内网测试环境一键部署
# 用法: ./scripts/deploy.sh [服务器内网IP]   （不传则自动探测）
set -euo pipefail
cd "$(dirname "$0")/.."

# 1. 首次运行从模板生成 .env
if [ ! -f .env ]; then
  cp .env.example .env
  echo "已从 .env.example 生成 .env"
fi

# 2. 确定服务器内网 IP
IP="${1:-}"
if [ -z "$IP" ]; then
  IP=$(hostname -I 2>/dev/null | awk '{print $1}')
fi
if [ -z "$IP" ]; then
  echo "无法自动获取内网 IP，请手动传入: ./scripts/deploy.sh <服务器IP>"
  exit 1
fi
echo "使用服务器 IP: $IP"

# 3. 把 IP 写进 .env（MinIO 外链地址必须是客户端能访问的地址）
sed -i "s|^SERVER_IP=.*|SERVER_IP=${IP}|" .env
sed -i "s|^MINIO_EXTERNAL_ADDRESS=.*|MINIO_EXTERNAL_ADDRESS=\"http://${IP}:10005\"|" .env
sed -i "s|^GRAFANA_URL=.*|GRAFANA_URL=\"http://${IP}:13000/\"|" .env

# 4. 预创建挂载目录（避免 docker 把文件路径自动建成目录）
mkdir -p components/redis/config components/mnt/data components/mongodb components/etcd components/kafka
touch components/redis/config/redis.conf

# 5. 拉镜像并启动
docker compose pull
docker compose up -d

# 6. 等待 openim-server 健康（首次启动约 30-60 秒）
echo "等待 openim-server 就绪（最长约 2 分钟）..."
status="unknown"
for _ in $(seq 1 24); do
  status=$(docker inspect -f '{{.State.Health.Status}}' openim-server 2>/dev/null || echo "unknown")
  [ "$status" = "healthy" ] && break
  sleep 5
done

docker compose ps
echo
if [ "$status" = "healthy" ]; then
  echo "部署完成。下一步运行自测: ./scripts/selftest.sh ${IP}"
else
  echo "openim-server 尚未 healthy（当前: ${status}）。可执行 docker compose logs -f openim-server 查看日志。"
fi
