#!/bin/bash
# ================================================================
# VA 众包平台 — Ubuntu 服务器一次性部署脚本
# 使用方法：
#   1. 将项目上传到服务器：scp -r . user@server:/opt/va_backend
#   2. 在服务器上执行：cd /opt/va_backend && sudo bash server/deploy.sh
# ================================================================
set -e

[ "$(id -u)" -ne 0 ] && echo "请用 root 或 sudo 执行" && exit 1

PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
DATA_DIR="$PROJECT_DIR/data"
GO_VERSION="1.22.4"

echo "================================================="
echo "  VA 众包平台 — Ubuntu 部署"
echo "  项目目录: $PROJECT_DIR"
echo "================================================="

# ── 1. 系统依赖 ──────────────────────────────────────
echo ""
echo "[1/6] 安装系统依赖..."
apt-get update -qq
apt-get install -y -qq curl wget nginx

# ── 2. 安装 Docker ───────────────────────────────────
echo "[2/6] 安装 Docker..."
if ! command -v docker &>/dev/null; then
    curl -fsSL https://get.docker.com | sh
    systemctl enable docker
    systemctl start docker
    echo "  ✓ Docker 安装完成"
else
    echo "  ✓ Docker 已安装 ($(docker --version))"
fi

# ── 3. 安装 Go ───────────────────────────────────────
echo "[3/6] 安装 Go $GO_VERSION..."
if ! command -v go &>/dev/null || [[ "$(go version)" != *"$GO_VERSION"* ]]; then
    wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -O /tmp/go.tar.gz
    rm -rf /usr/local/go
    tar -C /usr/local -xzf /tmp/go.tar.gz
    rm /tmp/go.tar.gz
    # 写入环境变量（对所有用户生效）
    cat > /etc/profile.d/go.sh << 'EOF'
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
EOF
    export PATH=$PATH:/usr/local/go/bin
    echo "  ✓ Go $GO_VERSION 安装完成"
else
    echo "  ✓ Go 已安装 ($(go version))"
fi

# ── 4. 目录结构 ──────────────────────────────────────
echo "[4/6] 初始化目录结构..."
mkdir -p "$DATA_DIR/mongo" "$DATA_DIR/redis"
mkdir -p "$PROJECT_DIR/runtime/logs" "$PROJECT_DIR/runtime/pids"
mkdir -p "$PROJECT_DIR/uploads/sop" "$PROJECT_DIR/uploads/apk" \
         "$PROJECT_DIR/uploads/plugin" "$PROJECT_DIR/uploads/images"
mkdir -p "$PROJECT_DIR/keys"
echo "  ✓ 目录创建完成"

# ── 5. Docker 容器 ───────────────────────────────────
echo "[5/6] 配置 Docker 容器..."

# MongoDB
if ! docker inspect mongodb_va &>/dev/null; then
    echo "  → 创建 MongoDB 容器"
    docker run -d \
        --name mongodb_va \
        --restart unless-stopped \
        -p 127.0.0.1:27017:27017 \
        -v "$DATA_DIR/mongo:/data/db" \
        mongo:latest
else
    echo "  ✓ MongoDB 容器已存在"
fi

# Redis
if ! docker inspect my-redis &>/dev/null; then
    echo "  → 创建 Redis 容器"
    docker run -d \
        --name my-redis \
        --restart unless-stopped \
        -p 127.0.0.1:6379:6379 \
        -v "$DATA_DIR/redis:/data" \
        redis:latest redis-server --appendonly yes
else
    echo "  ✓ Redis 容器已存在"
fi

# mongo-express
if ! docker inspect mongo-express &>/dev/null; then
    echo "  → 创建 mongo-express 容器"
    docker run -d \
        --name mongo-express \
        --restart unless-stopped \
        --add-host=host.docker.internal:host-gateway \
        -p 127.0.0.1:8082:8081 \
        -e ME_CONFIG_MONGODB_SERVER=host.docker.internal \
        -e ME_CONFIG_MONGODB_PORT=27017 \
        -e ME_CONFIG_MONGODB_ENABLE_ADMIN=true \
        -e ME_CONFIG_BASICAUTH=true \
        -e ME_CONFIG_BASICAUTH_USERNAME=admin \
        -e ME_CONFIG_BASICAUTH_PASSWORD=admin123 \
        -e ME_CONFIG_SITE_BASEURL=/db/ \
        -e ME_CONFIG_SITE_SESSIONSECRET=secret \
        mongo-express:latest
else
    echo "  ✓ mongo-express 容器已存在"
fi

# ── 6. nginx ─────────────────────────────────────────
echo "[6/6] 配置 nginx..."
cp "$PROJECT_DIR/server/nginx.conf" /etc/nginx/sites-available/va_backend
ln -sf /etc/nginx/sites-available/va_backend /etc/nginx/sites-enabled/va_backend
# 禁用默认站点（避免端口冲突）
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl enable nginx
systemctl reload nginx
echo "  ✓ nginx 配置完成"

# ── 编译 ─────────────────────────────────────────────
echo ""
echo "编译 Go 服务..."
cd "$PROJECT_DIR"
/usr/local/go/bin/go build -o va_backend .
echo "  ✓ 编译成功"

echo ""
echo "================================================="
echo "  部署完成！执行以下命令启动所有服务："
echo ""
echo "    sudo bash $PROJECT_DIR/server/start.sh"
echo "================================================="
