#!/bin/bash
# MeshRay Debian/Ubuntu 安装脚本

set -e

echo "========================================"
echo "  MeshRay Debian/Ubuntu 安装脚本"
echo "========================================"

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
    echo "❌ 请使用root权限运行此脚本"
    echo "   sudo bash install-debian.sh"
    exit 1
fi

# 检查系统
if ! grep -qi "debian\|ubuntu" /etc/os-release 2>/dev/null; then
    echo "⚠️  警告：此脚本专为Debian/Ubuntu系统设计"
    read -p "是否继续？(y/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 1
    fi
fi

echo "✅ 系统检查通过"

# 更新系统包
echo "📦 更新系统包..."
apt-get update -qq

# 安装依赖
echo "📦 安装依赖..."
apt-get install -y -qq \
    curl \
    wget \
    tar \
    systemd \
    > /dev/null 2>&1

echo "✅ 依赖安装完成"

# 创建安装目录
INSTALL_DIR="/opt/meshray"
echo "📁 创建安装目录: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR"
mkdir -p "$INSTALL_DIR/data"
mkdir -p "$INSTALL_DIR/logs"
mkdir -p "$INSTALL_DIR/web"

# 复制MeshRay文件
if [ ! -f "./meshray" ]; then
    echo "❌ 未找到 meshray 二进制文件"
    echo ""
    echo "请先构建Linux版本："
    echo "  GOOS=linux GOARCH=amd64 go build -o meshray ./cmd/meshray"
    echo ""
    echo "然后将以下文件上传到服务器："
    echo "  - meshray (二进制文件)"
    echo "  - web/dist/ (前端文件)"
    echo "  - install-debian.sh (本脚本)"
    echo ""
    exit 1
fi

echo "📦 使用本地二进制文件..."
cp ./meshray "$INSTALL_DIR/"

# 复制前端文件
if [ -d "./web/dist" ]; then
    echo "📦 复制前端文件..."
    cp -r ./web/dist/* "$INSTALL_DIR/web/" 2>/dev/null || true
else
    echo "⚠️  未找到前端文件，将使用内嵌的静态文件"
fi

# 设置权限
chmod +x "$INSTALL_DIR/meshray"

# 创建配置文件
if [ ! -f "$INSTALL_DIR/config.yaml" ]; then
    echo "📝 创建配置文件..."
    cat > "$INSTALL_DIR/config.yaml" << 'EOF'
server:
  port: 9531
  mode: release
  static_path: /opt/meshray/web

database:
  type: sqlite
  path: /opt/meshray/data/meshray.db

jwt:
  secret: "$(openssl rand -hex 32)"
  access_token_duration: 2h
  refresh_token_duration: 7d

log:
  level: info
  format: json
  output: /opt/meshray/logs/meshray.log
  max_size: 100
  max_backups: 7
  max_age: 30

encryption:
  network_secret_key: ""

wireguard:
  preferred_mode: auto

# STUN 服务器配置
stun:
  # 默认 STUN 服务器列表（国内和国外）
  default_servers:
    # 国内 STUN 服务器
    - stun:stun.qq.com:3478
    - stun:stun.miwifi.com:3478
    - stun:stun.bige0.com:3478
    # 国外 STUN 服务器（Google）
    - stun:stun.l.google.com:19302
    - stun:stun1.l.google.com:19302
    - stun:stun2.l.google.com:19302
    - stun:stun3.l.google.com:19302
    - stun:stun4.l.google.com:19302
    # 国外 STUN 服务器（其他）
    - stun:stun.cloudflare.com:3478
    - stun:stun.nextcloud.com:443
    - stun:stun.sipgate.net:3478
    - stun:stun.antisip.com:3478
    - stun:stun.sonetel.com:3478
    - stun:stun.voipgate.com:3478

  # STUN 服务器选择策略
  # auto: 自动选择（优先国内，延迟低的优先）
  # domestic: 仅使用国内服务器
  # international: 仅使用国外服务器
  # custom: 仅使用自定义服务器
  selection_strategy: auto

  # 是否启用 STUN 服务器自动测试
  auto_test: true

  # STUN 测试间隔（秒）
  test_interval: 300

  # STUN 超时时间（秒）
  timeout: 5

# TURN 服务器配置（可选）
turn:
  # 默认 TURN 服务器
  # 如果配置了 TURN 服务器，将作为 STUN 穿透失败时的回退方案
  default_servers: []
  # 示例配置：
  # - url: turn:turn.example.com:3478
  #   username: user
  #   credential: pass
  #   auth_type: credential
EOF
    echo "✅ 配置文件已创建"
fi

# 创建systemd服务
echo "🔧 创建系统服务..."
cat > /etc/systemd/system/meshray.service << EOF
[Unit]
Description=MeshRay - 智能组网工具
After=network.target
Wants=network.target

[Service]
Type=simple
User=root
WorkingDirectory=$INSTALL_DIR
ExecStart=$INSTALL_DIR/meshray
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

# 安全设置
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=$INSTALL_DIR

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd
systemctl daemon-reload

echo "✅ 系统服务已创建"

# 启动服务
echo "🚀 启动MeshRay服务..."
systemctl enable meshray
systemctl start meshray

# 检查服务状态
sleep 2
if systemctl is-active --quiet meshray; then
    echo "✅ MeshRay服务启动成功！"
else
    echo "❌ MeshRay服务启动失败"
    echo "   查看日志: journalctl -u meshray -f"
    exit 1
fi

# 获取服务器IP
SERVER_IP=$(hostname -I | awk '{print $1}')

echo ""
echo "========================================"
echo "  🎉 MeshRay 安装完成！"
echo "========================================"
echo ""
echo "📍 访问地址："
echo "   http://$SERVER_IP:9531"
echo ""
echo "🔧 服务管理："
echo "   启动: systemctl start meshray"
echo "   停止: systemctl stop meshray"
echo "   重启: systemctl restart meshray"
echo "   状态: systemctl status meshray"
echo "   日志: journalctl -u meshray -f"
echo ""
echo "📁 安装目录："
echo "   程序: $INSTALL_DIR/meshray"
echo "   配置: $INSTALL_DIR/config.yaml"
echo "   数据: $INSTALL_DIR/data/"
echo "   日志: $INSTALL_DIR/logs/"
echo ""
echo "⚠️  首次启动会显示管理员初始密码"
echo "   请查看日志获取密码: journalctl -u meshray | grep '初始密码'"
echo ""
echo "========================================"