#!/bin/bash

# =====================================================
# 🚀 Docusaurus 网站部署脚本（中文化 & 彩色输出）
# =====================================================

# -------------------------
# 📁 本地和远程路径配置
# -------------------------
LOCAL_PROJECT_DIR="/Users/enoch/imenoch"        # 本地 Docusaurus 项目路径
LOCAL_BUILD_DIR="$LOCAL_PROJECT_DIR/build"     # 构建生成的 build 目录
REMOTE_SERVER="root@129.159.141.254"           # 远程服务器 SSH
REMOTE_DIR="/var/www/docusaurus"                  # 远程部署目录
BACKUP_DIR="/root/backup/docusaurus_backup"        # 远程备份目录（服务器根目录）
MAX_BACKUPS=50                                  # 最多保留 5 次备份

# -------------------------
# ⏱️ 记录开始时间
# -------------------------
START_TIME=$(date +%s)

# -------------------------
# 🔹 检查本地项目目录是否存在
# -------------------------
if [ ! -d "$LOCAL_PROJECT_DIR" ]; then
    echo -e "❌ 错误：本地项目目录 $LOCAL_PROJECT_DIR 不存在。"
    exit 1
fi

# -------------------------
# 🔹 进入项目目录并构建网站
# -------------------------
echo -e "🔹 正在进入项目目录..."
cd "$LOCAL_PROJECT_DIR"

echo -e "🔹 正在构建网站（跳过压缩以加快速度）..."
npm run build -- --no-minify
if [ $? -ne 0 ]; then
    echo -e "❌ 构建失败，请检查 Docusaurus 配置或依赖。"
    exit 1
fi
echo -e "✅ 构建完成！"

# -------------------------
# 🔹 备份远程现有文件
# -------------------------
echo -e "📦 正在备份服务器文件..."
BACKUP_FILENAME="$BACKUP_DIR/backup_$(date +'%Y%m%d%H%M%S').tar.gz"
ssh "$REMOTE_SERVER" "mkdir -p $BACKUP_DIR && tar -czf $BACKUP_FILENAME -C $REMOTE_DIR ."
if [ $? -ne 0 ]; then
    echo -e "❌ 备份失败！"
    exit 1
fi
echo -e "✅ 备份完成：$BACKUP_FILENAME"

# -------------------------
# 🔹 清理旧备份
# -------------------------
echo -e "🧹 正在清理旧备份..."
ssh "$REMOTE_SERVER" "
    cd $BACKUP_DIR;
    ls -t | tail -n +$((MAX_BACKUPS + 1)) | xargs -r rm -f
"
echo -e "✅ 旧备份清理完成"

# -------------------------
# 🔹 上传 build 文件到服务器（中文化 rsync 输出）
# -------------------------
echo -e "🔹 正在上传文件到服务器..."
rsync -avz --delete "$LOCAL_BUILD_DIR/" "$REMOTE_SERVER:$REMOTE_DIR/" | while read line; do
    line=${line//building file list ... done/生成文件列表…完成}
    line=${line//created directory/已在服务器创建目录}
    line=${line//sent/已上传}
    line=${line//received/，下载}
    line=${line//bytes/字节}
    line=${line//speedup is/增量传输加速比}
    echo "$line"
done

if [ $? -ne 0 ]; then
    echo -e "❌ 上传失败！"
    exit 1
fi
echo -e "✅ 上传完成！"

# -------------------------
# 🔹 重新加载 Caddy 服务
# -------------------------
echo -e "🔹 正在重新加载 Caddy 服务..."
ssh "$REMOTE_SERVER" "systemctl reload caddy"
if [ $? -eq 0 ]; then
    echo -e "🎉 部署成功！请访问：https://imenoch.327618.xyz/"
else
    echo -e "❌ 重新加载 Caddy 服务失败！"
    exit 1
fi

# -------------------------
# ⏱️ 计算总耗时
# -------------------------
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo -e "⏱️ 总共耗时：$DURATION 秒"
