#!/usr/bin/env bash
set -euo pipefail

PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"

# .env 固定路径（act_runner 容器已挂载 /opt/camtalk）
ENV_FILE="/opt/camtalk/.env"

# 颜色输出
GREEN='\033[0;32m'
NC='\033[0m'

info()  { echo -e "${GREEN}[INFO]${NC} $*"; }

# .env 检查：首次部署时从 .env.example 复制模板，提示用户填写
check_env() {
  if [ ! -f "$ENV_FILE" ]; then
    echo "=============================================="
    echo " 错误: 未找到环境变量文件"
    echo " 路径: $ENV_FILE"
    echo " 模板参考: backend/.env.example"
    echo "=============================================="
    exit 1
  fi
}

check_env

# 所有 docker compose 命令统一使用 --env-file，用于解析 ${POSTGRES_USER} 等变量
DC="docker compose --env-file $ENV_FILE"

cmd_build() {
  info "构建 Docker 镜像..."
  DOCKER_BUILDKIT=1 $DC build --parallel
  info "构建完成"
}

cmd_up() {
  info "启动服务..."
  $DC up -d
  info "服务已启动"
  PUBLIC_IP=$(curl -s --connect-timeout 3 https://ifconfig.me 2>/dev/null || \
              curl -s --connect-timeout 3 https://api.ipify.org 2>/dev/null || \
              echo "YOUR_SERVER_IP")
  info "前端: http://$PUBLIC_IP:9000"
  info "健康检查: http://$PUBLIC_IP:9000/api/health"
}

cmd_down() {
  info "停止服务..."
  $DC down
  info "服务已停止"
}

cmd_restart() {
  info "重启服务..."
  cmd_down
  cmd_up
}

cmd_logs() {
  $DC logs -f "${@}"
}

cmd_status() {
  $DC ps
}

usage() {
  cat <<EOF
CamTalk 部署脚本

用法: $0 <命令>

命令:
  build     构建 Docker 镜像
  up        启动服务（后台运行）
  down      停止服务
  restart   重启服务
  logs      查看日志（可加服务名，如: $0 logs backend）
  status    查看服务状态

.env 路径: $ENV_FILE
EOF
}

case "${1:-}" in
  build)   cmd_build ;;
  up)      cmd_up ;;
  down)    cmd_down ;;
  restart) cmd_restart ;;
  logs)    shift; cmd_logs "$@" ;;
  status)  cmd_status ;;
  *)       usage; exit 1 ;;
esac