#!/bin/bash
# =============================================================================
# MinIO Nginx 配置安装脚本
# =============================================================================
#
# 功能:
#   - 安装 MinIO Nginx 反向代理配置
#   - 配置 SSL 证书 (可选)
#   - 创建缓存目录
#
# 用法:
#   ./install.sh              # 安装配置
#   ./install.sh --ssl        # 安装配置并配置 SSL
#   ./install.sh --uninstall  # 卸载配置
#
# =============================================================================

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
NGINX_AVAILABLE="/etc/nginx/sites-available"
NGINX_ENABLED="/etc/nginx/sites-enabled"
CONFIG_FILE="minio.szaiai.com.conf"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查 root 权限
check_root() {
    if [ "$EUID" -ne 0 ]; then
        log_error "请使用 root 权限运行此脚本"
        echo "用法: sudo $0"
        exit 1
    fi
}

# 安装配置
install_config() {
    check_root

    log_info "安装 MinIO Nginx 配置..."

    # 检查 Nginx 是否安装
    if ! command -v nginx &> /dev/null; then
        log_error "Nginx 未安装，请先安装 Nginx"
        exit 1
    fi

    # 创建缓存目录
    log_info "创建缓存目录..."
    mkdir -p /var/cache/nginx/minio
    chown -R www-data:www-data /var/cache/nginx/minio

    # 复制配置文件
    log_info "复制配置文件..."
    cp "$SCRIPT_DIR/$CONFIG_FILE" "$NGINX_AVAILABLE/"

    # 创建符号链接
    if [ -L "$NGINX_ENABLED/$CONFIG_FILE" ]; then
        log_warning "配置已存在，正在更新..."
        rm "$NGINX_ENABLED/$CONFIG_FILE"
    fi
    ln -s "$NGINX_AVAILABLE/$CONFIG_FILE" "$NGINX_ENABLED/"

    # 测试配置
    log_info "测试 Nginx 配置..."
    if nginx -t; then
        log_success "配置测试通过"
    else
        log_error "配置测试失败，请检查配置文件"
        exit 1
    fi

    # 重新加载 Nginx
    log_info "重新加载 Nginx..."
    systemctl reload nginx

    log_success "MinIO Nginx 配置安装完成！"
    echo ""
    echo "下一步:"
    echo "  1. 确保 DNS 已配置指向此服务器"
    echo "  2. 运行 ./install.sh --ssl 配置 SSL 证书"
    echo ""
}

# 配置 SSL
setup_ssl() {
    check_root

    log_info "配置 SSL 证书..."

    # 检查 certbot
    if ! command -v certbot &> /dev/null; then
        log_info "安装 certbot..."
        apt-get update
        apt-get install -y certbot python3-certbot-nginx
    fi

    log_info "获取 SSL 证书..."
    certbot --nginx \
        -d minio.szaiai.com \
        -d console.minio.szaiai.com \
        -d cdn.szaiai.com \
        --non-interactive \
        --agree-tos \
        --email admin@szaiai.com \
        --redirect

    log_success "SSL 证书配置完成！"
}

# 卸载配置
uninstall_config() {
    check_root

    log_info "卸载 MinIO Nginx 配置..."

    # 删除符号链接
    if [ -L "$NGINX_ENABLED/$CONFIG_FILE" ]; then
        rm "$NGINX_ENABLED/$CONFIG_FILE"
        log_info "已删除启用的配置"
    fi

    # 删除配置文件
    if [ -f "$NGINX_AVAILABLE/$CONFIG_FILE" ]; then
        rm "$NGINX_AVAILABLE/$CONFIG_FILE"
        log_info "已删除配置文件"
    fi

    # 重新加载 Nginx
    systemctl reload nginx

    log_success "MinIO Nginx 配置已卸载"
}

# 显示帮助
show_help() {
    echo ""
    echo "MinIO Nginx 配置安装脚本"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  (无参数)     安装 Nginx 配置"
    echo "  --ssl        配置 SSL 证书 (需要先安装配置)"
    echo "  --uninstall  卸载配置"
    echo "  --help       显示帮助"
    echo ""
}

# 主入口
case "${1:-}" in
    --ssl)
        setup_ssl
        ;;
    --uninstall)
        uninstall_config
        ;;
    --help|-h)
        show_help
        ;;
    "")
        install_config
        ;;
    *)
        log_error "未知选项: $1"
        show_help
        exit 1
        ;;
esac
