#!/bin/bash

# 配置
SOURCE_DIR="dist-prod"              # 打包生成的源文件夹
ZIP_NAME="dc.ifoodme.com.zip"       # 输出的 ZIP 文件名
TEMP_DIR="/tmp/dc.ifoodme.com"      # 临时目录，用于构建目标结构
TARGET_DIR="dc.ifoodme.com"         # ZIP 中的目标目录名
BUILD_CMD="pnpm run build:prod"     # 打包命令

# FTP 配置
FTP_SERVER="104.233.167.88"
FTP_PORT="21"
FTP_USER="admin"        # 这里替换成你的 FTP 用户名
FTP_PASS="snF1szwjJZcJ"        # 这里替换成你的 FTP 密码
FTP_TARGET_DIR="/"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

# 检查命令是否存在
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# 检查依赖
check_dependencies() {
    for cmd in pnpm zip unzip curl; do
        if ! command_exists "$cmd"; then
            echo -e "${RED}错误：需要安装 $cmd${NC}"
            exit 1
        fi
    done
}

# 检查并删除旧 ZIP 文件
check_and_remove_zip() {
    if [ -f "$ZIP_NAME" ]; then
        echo "检测到旧 ZIP 文件，删除中..."
        rm -f "$ZIP_NAME"
        echo -e "${GREEN}旧 ZIP 文件已删除${NC}"
    fi
}

# 执行打包
run_build() {
    echo "开始执行打包: $BUILD_CMD..."
    if ! $BUILD_CMD; then
        echo -e "${RED}打包失败${NC}"
        exit 1
    fi
    echo -e "${GREEN}打包完成${NC}"
}

# 检查源文件夹
check_source() {
    if [ ! -d "$SOURCE_DIR" ]; then
        echo -e "${RED}错误：源文件夹 $SOURCE_DIR 不存在${NC}"
        exit 1
    fi
    if [ ! -f "$SOURCE_DIR/index.html" ]; then
        echo -e "${RED}错误：$SOURCE_DIR 中没有 index.html 文件${NC}"
        exit 1
    fi
}

# 打包 ZIP
create_zip() {
    echo "开始打包 ZIP..."

    # 创建临时目录并复制文件
    mkdir -p "$TEMP_DIR"
    cp -r "$SOURCE_DIR"/* "$TEMP_DIR"

    # 重命名临时目录为目标目录名
    mv "$TEMP_DIR" "$TARGET_DIR"

    # 打包为 ZIP
    zip -r "$ZIP_NAME" "$TARGET_DIR" >/dev/null
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}打包成功：$ZIP_NAME${NC}"
    else
        echo -e "${RED}打包失败${NC}"
        exit 1
    fi
}

# FTP 上传
upload_ftp() {
    echo "开始上传文件到 FTP 服务器 $FTP_SERVER:$FTP_PORT ..."

    curl -T "$ZIP_NAME" --ftp-create-dirs -u "$FTP_USER:$FTP_PASS" "ftp://$FTP_SERVER:$FTP_PORT$FTP_TARGET_DIR/$ZIP_NAME"

    if [ $? -eq 0 ]; then
        echo -e "${GREEN}文件上传成功：$FTP_TARGET_DIR/$ZIP_NAME${NC}"
    else
        echo -e "${RED}文件上传失败${NC}"
        exit 1
    fi
}

# 测试解压（可选）
test_unzip() {
    echo "测试解压..."
    mkdir -p test_unzip
    unzip -o "$ZIP_NAME" -d test_unzip >/dev/null
    if [ -f "test_unzip/$TARGET_DIR/index.html" ]; then
        echo -e "${GREEN}解压测试成功：test_unzip/$TARGET_DIR/index.html 存在${NC}"
    else
        echo -e "${RED}解压测试失败：未生成正确的目录结构${NC}"
        exit 1
    fi
}

# 清理
cleanup() {
    echo "清理临时文件..."
    rm -rf "$TARGET_DIR" test_unzip
    echo -e "${GREEN}清理完成${NC}"
}

# 主函数
main() {
    check_dependencies
    check_and_remove_zip  # 先检查并删除旧的 ZIP 文件
    run_build
    check_source
    create_zip
    upload_ftp
    cleanup
    echo -e "${GREEN}所有任务完成！${NC}"
}

# 执行
main
