#!/bin/bash

# 智慧畜牧业小程序矩阵部署脚本
# 用于自动化部署小程序到各个平台

set -e

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

# 日志函数
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"
}

# 检查必要的工具
check_dependencies() {
    log_info "检查依赖工具..."
    
    if ! command -v node &> /dev/null; then
        log_error "Node.js 未安装，请先安装 Node.js"
        exit 1
    fi
    
    if ! command -v npm &> /dev/null; then
        log_error "npm 未安装，请先安装 npm"
        exit 1
    fi
    
    log_success "依赖工具检查完成"
}

# 安装依赖
install_dependencies() {
    log_info "安装项目依赖..."
    cd mini_program
    
    if [ -f "package-lock.json" ]; then
        npm ci
    else
        npm install
    fi
    
    log_success "依赖安装完成"
    cd ..
}

# 构建项目
build_project() {
    local platform=$1
    local app_name=$2
    
    log_info "构建 ${app_name} (${platform})..."
    
    cd mini_program
    
    case $platform in
        "mp-weixin")
            npm run build:mp-weixin
            ;;
        "mp-alipay")
            npm run build:mp-alipay
            ;;
        "mp-baidu")
            npm run build:mp-baidu
            ;;
        "mp-toutiao")
            npm run build:mp-toutiao
            ;;
        "mp-qq")
            npm run build:mp-qq
            ;;
        "h5")
            npm run build:h5
            ;;
        "app-plus")
            npm run build:app-plus
            ;;
        *)
            log_error "不支持的平台: $platform"
            exit 1
            ;;
    esac
    
    log_success "${app_name} 构建完成"
    cd ..
}

# 部署到服务器
deploy_to_server() {
    local platform=$1
    local server_path=$2
    
    log_info "部署到服务器..."
    
    if [ -z "$server_path" ]; then
        log_warning "未指定服务器路径，跳过服务器部署"
        return
    fi
    
    # 这里可以添加具体的部署逻辑
    # 例如：rsync、scp、ftp 等
    
    log_success "服务器部署完成"
}

# 生成版本信息
generate_version_info() {
    log_info "生成版本信息..."
    
    local version=$(date +"%Y%m%d%H%M%S")
    local git_commit=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
    local build_time=$(date "+%Y-%m-%d %H:%M:%S")
    
    cat > mini_program/version.json << EOF
{
  "version": "$version",
  "gitCommit": "$git_commit",
  "buildTime": "$build_time",
  "environment": "${ENVIRONMENT:-production}"
}
EOF
    
    log_success "版本信息生成完成"
}

# 清理构建文件
cleanup() {
    log_info "清理构建文件..."
    
    cd mini_program
    
    # 清理各平台构建文件
    rm -rf dist/
    rm -rf unpackage/
    
    log_success "清理完成"
    cd ..
}

# 验证构建结果
validate_build() {
    local platform=$1
    
    log_info "验证构建结果..."
    
    cd mini_program
    
    case $platform in
        "mp-weixin")
            if [ ! -d "dist/build/mp-weixin" ]; then
                log_error "微信小程序构建失败"
                exit 1
            fi
            ;;
        "h5")
            if [ ! -d "dist/build/h5" ]; then
                log_error "H5 构建失败"
                exit 1
            fi
            ;;
    esac
    
    log_success "构建结果验证通过"
    cd ..
}

# 发送通知
send_notification() {
    local status=$1
    local message=$2
    
    # 这里可以添加通知逻辑
    # 例如：钉钉、企业微信、邮件等
    
    log_info "发送通知: $message"
}

# 主函数
main() {
    local platform=${1:-"mp-weixin"}
    local app_name=${2:-"智慧畜牧业小程序"}
    local environment=${3:-"production"}
    local server_path=$4
    
    export ENVIRONMENT=$environment
    
    log_info "开始部署 ${app_name}"
    log_info "平台: $platform"
    log_info "环境: $environment"
    
    # 检查依赖
    check_dependencies
    
    # 清理旧文件
    cleanup
    
    # 生成版本信息
    generate_version_info
    
    # 安装依赖
    install_dependencies
    
    # 构建项目
    build_project $platform $app_name
    
    # 验证构建结果
    validate_build $platform
    
    # 部署到服务器
    deploy_to_server $platform $server_path
    
    log_success "部署完成！"
    
    # 发送成功通知
    send_notification "success" "${app_name} 部署成功"
}

# 显示帮助信息
show_help() {
    echo "智慧畜牧业小程序矩阵部署脚本"
    echo ""
    echo "用法:"
    echo "  $0 [平台] [应用名称] [环境] [服务器路径]"
    echo ""
    echo "参数:"
    echo "  平台        目标平台 (mp-weixin|mp-alipay|mp-baidu|mp-toutiao|mp-qq|h5|app-plus)"
    echo "  应用名称    应用名称 (默认: 智慧畜牧业小程序)"
    echo "  环境        部署环境 (development|testing|production)"
    echo "  服务器路径  服务器部署路径 (可选)"
    echo ""
    echo "示例:"
    echo "  $0 mp-weixin 养殖管理小程序 production"
    echo "  $0 h5 牛肉商城 testing /var/www/html"
    echo "  $0 mp-alipay 银行监管小程序 production"
    echo ""
    echo "支持的平台:"
    echo "  mp-weixin   微信小程序"
    echo "  mp-alipay   支付宝小程序"
    echo "  mp-baidu    百度小程序"
    echo "  mp-toutiao  字节跳动小程序"
    echo "  mp-qq       QQ小程序"
    echo "  h5          H5网页版"
    echo "  app-plus    原生App"
}

# 错误处理
error_handler() {
    local line_number=$1
    log_error "脚本在第 $line_number 行出错"
    send_notification "error" "部署失败，请检查日志"
    exit 1
}

# 设置错误处理
trap 'error_handler $LINENO' ERR

# 检查参数
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    show_help
    exit 0
fi

# 执行主函数
main "$@"