#!/bin/bash

# 🚀 Jiao77.cn 一键部署脚本
# 自动构建并部署 Astro 网站到生产服务器

set -e  # 遇到错误立即停止

SERVER_IP="110.42.70.70"
DEFAULT_USER="root"
DEFAULT_WEB_ROOT="/var/www/jiao77.cn"

echo "🌟 =================================="
echo "🌟 Jiao77.cn 网站部署工具"
echo "🌟 =================================="
echo ""

# 检查必要的工具
check_requirements() {
    echo "🔍 检查部署环境..."
    
    if ! command -v npm &> /dev/null; then
        echo "❌ 错误: npm 未安装"
        exit 1
    fi
    
    if ! command -v rsync &> /dev/null; then
        echo "⚠️  警告: rsync 未安装，将使用 scp"
        USE_RSYNC=false
    else
        USE_RSYNC=true
    fi
    
    echo "✅ 环境检查完成"
}

# 构建项目
build_project() {
    echo ""
    echo "📦 构建生产版本..."
    
    if [ ! -f "package.json" ]; then
        echo "❌ 错误: 当前目录不是 Astro 项目根目录"
        exit 1
    fi
    
    # 清理之前的构建
    if [ -d "dist" ]; then
        rm -rf dist
    fi
    
    # 构建项目
    npm run build
    
    if [ ! -d "dist" ]; then
        echo "❌ 错误: 构建失败，dist 目录不存在"
        exit 1
    fi
    
    echo "✅ 构建完成"
}

# 获取用户输入
get_deploy_config() {
    echo ""
    echo "⚙️  部署配置"
    
    read -p "📝 服务器用户名 (默认: ${DEFAULT_USER}): " USERNAME
    USERNAME=${USERNAME:-$DEFAULT_USER}
    
    read -p "📁 网站根目录 (默认: ${DEFAULT_WEB_ROOT}): " WEB_ROOT  
    WEB_ROOT=${WEB_ROOT:-$DEFAULT_WEB_ROOT}
    
    echo ""
    echo "📋 部署信息确认:"
    echo "   服务器: ${SERVER_IP}"
    echo "   用户名: ${USERNAME}"
    echo "   目录: ${WEB_ROOT}"
    echo ""
    
    read -p "❓ 确认部署? (y/N): " CONFIRM
    if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
        echo "❌ 部署已取消"
        exit 0
    fi
}

# 上传 .htaccess 文件
upload_htaccess() {
    echo "📤 上传 .htaccess 文件..."
    if [ -f ".htaccess" ]; then
        scp .htaccess ${USERNAME}@${SERVER_IP}:${WEB_ROOT}/.htaccess
        echo "✅ .htaccess 文件已上传"
    else
        echo "⚠️  .htaccess 文件不存在，跳过上传"
    fi
}

# 部署文件
deploy_files() {
    echo ""
    echo "🚀 开始部署文件..."
    
    if [ "$USE_RSYNC" = true ]; then
        echo "📡 使用 rsync 同步文件..."
        rsync -avz --delete --progress \
            --exclude='.htaccess' \
            dist/ ${USERNAME}@${SERVER_IP}:${WEB_ROOT}/
    else
        echo "📡 使用 scp 上传文件..."
        # 创建临时压缩包
        cd dist
        tar -czf ../deploy-temp.tar.gz *
        cd ..
        
        # 上传并解压
        scp deploy-temp.tar.gz ${USERNAME}@${SERVER_IP}:/tmp/
        ssh ${USERNAME}@${SERVER_IP} "cd ${WEB_ROOT} && sudo tar -xzf /tmp/deploy-temp.tar.gz && sudo rm /tmp/deploy-temp.tar.gz"
        
        # 清理本地临时文件
        rm -f deploy-temp.tar.gz
    fi
    
    # 上传 .htaccess
    upload_htaccess
    
    echo "✅ 文件部署完成"
}

# 设置文件权限
set_permissions() {
    echo ""
    echo "🔐 设置文件权限..."
    
    ssh ${USERNAME}@${SERVER_IP} "
        sudo chown -R www-data:www-data ${WEB_ROOT}/ &&
        sudo find ${WEB_ROOT}/ -type d -exec chmod 755 {} \; &&
        sudo find ${WEB_ROOT}/ -type f -exec chmod 644 {} \;
    "
    
    if [ $? -eq 0 ]; then
        echo "✅ 权限设置完成"
    else
        echo "⚠️  权限设置失败，可能需要手动调整"
    fi
}

# 部署后测试
post_deploy_test() {
    echo ""
    echo "🧪 部署后测试..."
    
    # 测试网站是否可访问
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://${SERVER_IP}/ || echo "000")
    
    if [ "$HTTP_CODE" = "200" ]; then
        echo "✅ 网站访问正常 (HTTP $HTTP_CODE)"
    else
        echo "⚠️  网站可能存在问题 (HTTP $HTTP_CODE)"
    fi
    
    # 检测压缩是否启用
    GZIP_TEST=$(curl -H "Accept-Encoding: gzip" -s -I http://${SERVER_IP}/ | grep -i "content-encoding: gzip" || echo "")
    
    if [ -n "$GZIP_TEST" ]; then
        echo "✅ Gzip 压缩已启用"
    else
        echo "⚠️  Gzip 压缩未启用，建议检查 Apache 配置"
    fi
}

# 显示部署结果
show_results() {
    echo ""
    echo "🎉 =================================="
    echo "🎉 部署完成！"
    echo "🎉 =================================="
    echo ""
    echo "🌐 网站地址:"
    echo "   主域名: http://jiao77.cn"
    echo "   IP访问: http://${SERVER_IP}"
    echo ""
    echo "📋 建议检查事项:"
    echo "   ✓ 访问网站确认页面正常显示"
    echo "   ✓ 测试导航卡片点击功能"
    echo "   ✓ 检查 /reports 页面"
    echo "   ✓ 验证页眉展开/收缩功能"
    echo "   ✓ 测试移动端响应式设计"
    echo "   ✓ 检查动画效果是否正常"
    echo ""
    echo "🔧 如果遇到问题:"
    echo "   • 查看部署日志: tail -f /var/log/apache2/error.log"
    echo "   • 检查文件权限: ls -la ${WEB_ROOT}/"
    echo "   • 验证 Apache 配置: apache2ctl configtest"
    echo ""
}

# 主函数
main() {
    check_requirements
    build_project
    get_deploy_config
    deploy_files
    set_permissions
    post_deploy_test
    show_results
}

# 错误处理
trap 'echo "❌ 部署过程中出现错误，请检查输出信息"; exit 1' ERR

# 执行部署
main

echo "🎯 如需 SSL/HTTPS，请参考 DEPLOYMENT.md 中的 SSL 配置章节"
echo "📚 完整部署文档: https://github.com/你的仓库/blob/main/DEPLOYMENT.md"