#!/bin/sh

# 服务端部署脚本

# 定义常量
BASE_URL="http://183.238.148.253:9090/verUpdate/pm-ydb/"
TEMP_DIR="/data/vue/"
# 项目常量
PROJECT1="YDBChannelAdminVue"
PROJECT2="YDBCoreAdminVue"
PROJECT3="YDBH5"
PROJECT4="YDBPosterVue"
PROJECT5="YDBGatewayVue"
PROJECT_PATH1="YDBChannelAdminVue"
PROJECT_PATH2="YDBCoreAdminVue"
PROJECT_PATH3="YDBH5"
PROJECT_PATH4="YDBPosterVue"
PROJECT_PATH5="YDBGatewayVue"
ZIP_FILE1="ydb-vue-channel-admin.tar.gz"
ZIP_FILE2="ydb-vue-core-admin.tar.gz"
ZIP_FILE3="ydb-vue-h5.tar.gz"
ZIP_FILE4="ydb-vue-poster-design.tar.gz"
ZIP_FILE5="ydb-vue-gateway.tar.gz"

SELECTED_PROJECT=""
SELECTED_PATH=""
SELECTED_ZIP_FILE=""
URL=""
TEMP_FILE=""

# 项目选择函数
select_project() {
  echo "----------------------(๑•́ ∀ •̀๑)-------------------------"
  echo "请选择需要部署的项目（输入对应数字）："
  
  echo "1. $PROJECT1"
  echo "2. $PROJECT2"
  echo "3. $PROJECT3"
  echo "4. $PROJECT4"
  echo "5. $PROJECT5"
  
  printf "输入你的选择: "
  read choice
  echo "----------------------(๑•́ ∀ •̀๑)-------------------------"
  echo
  
  if [ "$choice" = "1" ]; then
    SELECTED_PROJECT="$PROJECT1"
    SELECTED_PATH="${TEMP_DIR}${PROJECT_PATH1}"
    SELECTED_ZIP_FILE="$ZIP_FILE1"
  elif [ "$choice" = "2" ]; then
    SELECTED_PROJECT="$PROJECT2"
    SELECTED_PATH="${TEMP_DIR}${PROJECT_PATH2}"
    SELECTED_ZIP_FILE="$ZIP_FILE2"
  elif [ "$choice" = "3" ]; then
    SELECTED_PROJECT="$PROJECT3"
    SELECTED_PATH="${TEMP_DIR}${PROJECT_PATH3}"
    SELECTED_ZIP_FILE="$ZIP_FILE3"
  elif [ "$choice" = "4" ]; then
    SELECTED_PROJECT="$PROJECT4"
    SELECTED_PATH="${TEMP_DIR}${PROJECT_PATH4}"
    SELECTED_ZIP_FILE="$ZIP_FILE4"
  elif [ "$choice" = "5" ]; then
    SELECTED_PROJECT="$PROJECT5"
    SELECTED_PATH="${TEMP_DIR}${PROJECT_PATH5}"
    SELECTED_ZIP_FILE="$ZIP_FILE5"
  else
    echo "无效的选择: $choice，请重试。"
    select_project
    return
  fi
  
  # 动态生成URL和临时文件名
  URL="${BASE_URL}${SELECTED_ZIP_FILE}"
  TEMP_FILE="${TEMP_DIR}${SELECTED_ZIP_FILE}"
  
  echo "你选择了项目: $SELECTED_PROJECT"
  echo "项目路径: $SELECTED_PATH"
  echo "下载文件: $SELECTED_ZIP_FILE"
  echo "下载URL: $URL"
  echo
}

# 拉取压缩包函数
pull_code() {
  echo "开始从URL拉取代码..."
  echo "URL: $URL"
  echo "目标文件: $TEMP_FILE"
  echo "当前目录: $(pwd)"
  
  # 拉取代码到当前目录
  curl -o "$TEMP_FILE" "$URL"
  if [ $? -ne 0 ]; then
    echo "拉取代码失败！"
    exit 1
  fi
  
  echo "代码拉取成功！"
  echo "文件保存在: $TEMP_FILE"
  echo
}

# 解压函数
extract_code() {
  echo "开始解压代码..."
  echo "压缩包路径: $TEMP_FILE"
  
  # 确保已经在项目目录中（pull_code函数已经进入）
  echo "当前目录: $(pwd)"
  
  # 先删除可能存在的dist_new目录
  if [ -d "dist_new" ]; then
    echo "发现已存在的dist_new目录，正在删除..."
    rm -rf "dist_new"
    echo "已删除dist_new目录"
  fi
  
  # 创建临时解压目录
  TEMP_EXTRACT_DIR="temp_extract"
  if [ -d "$TEMP_EXTRACT_DIR" ]; then
    echo "发现已存在的临时解压目录，正在删除..."
    rm -rf "$TEMP_EXTRACT_DIR"
  fi
  mkdir -p "$TEMP_EXTRACT_DIR"
  echo "已创建临时解压目录: $TEMP_EXTRACT_DIR"
  
  # 解压tar文件到临时目录
  echo "正在解压文件: $TEMP_FILE 到临时目录..."
  echo "解压过程详情:"
  tar -xvzf "$TEMP_FILE" -C "$TEMP_EXTRACT_DIR" || {
    echo "错误: 解压失败！"
    exit 1
  }
  echo "文件解压完成"
  
  # 显示解压后的目录结构
  echo "解压后的目录结构:"
  ls -la "$TEMP_EXTRACT_DIR"
  
  # 检查解压后的目录结构
  if [ -d "$TEMP_EXTRACT_DIR/dist" ]; then
    # 如果直接解压出dist目录，将其重命名为dist_new
    echo "发现dist目录，正在重命名为dist_new..."
    mv "$TEMP_EXTRACT_DIR/dist" "dist_new"
    echo "已将dist目录重命名为dist_new"
  else
    # 否则查找第一层目录下的dist目录
    echo "未直接找到dist目录，检查子目录..."
    # 统计子目录数量
    local subdir_count=$(ls -l "$TEMP_EXTRACT_DIR" | grep -c "^d")
    echo "发现 $subdir_count 个子目录"
    if [ "$subdir_count" -eq 1 ]; then
      # 获取第一个子目录名称
      local first_subdir=$(ls -1 "$TEMP_EXTRACT_DIR" | head -n 1)
      echo "检查子目录: $first_subdir"
      if [ -d "$TEMP_EXTRACT_DIR/$first_subdir/dist" ]; then
        # 如果只有一个子目录且包含dist，将dist目录移动出来
        echo "在子目录中找到dist目录，正在移动..."
        mv "$TEMP_EXTRACT_DIR/$first_subdir/dist" "dist_new"
        echo "已将dist目录移动到当前目录并重命名为dist_new"
      else
        echo "错误: 解压后的目录结构不符合预期，未找到dist目录！"
        echo "子目录内容:"
        ls -la "$TEMP_EXTRACT_DIR/$first_subdir"
        exit 1
      fi
    else
      echo "错误: 解压后的目录结构不符合预期，未找到dist目录！"
      echo "临时目录内容:"
      ls -la "$TEMP_EXTRACT_DIR"
      exit 1
    fi
  fi
  
  # 清理临时解压目录
  echo "正在清理临时解压目录..."
  rm -rf "$TEMP_EXTRACT_DIR"
  echo "已清理临时目录"
  
  echo "代码解压成功！"
  echo
}

# 备份原有dist目录函数
backup_dist() {
  echo "开始备份原有dist目录..."
  
  if [ -d "dist" ]; then
    # 生成备份文件名，格式：dist_bak_01212015（月日时分）
    BACKUP_NAME="dist_bak_$(date +%m%d%H%M)"
    mv "dist" "$BACKUP_NAME" || {
      echo "备份失败！"
      exit 1
    }
    echo "原有dist目录已备份为: $BACKUP_NAME"
  else
    echo "原有dist目录不存在，跳过备份"
  fi
  
  echo
}

# 重命名函数
rename_dist() {
  echo "开始重命名目录..."
  
  if [ -d "dist_new" ]; then
    mv "dist_new" "dist" || {
      echo "重命名失败！"
      exit 1
    }
    echo "目录已从 dist_new 重命名为 dist"
  else
    echo "dist_new目录不存在，重命名失败！"
    exit 1
  fi
  
  echo
}

# 清理临时文件函数
clean_temp() {
  echo "开始清理临时文件..."
  echo "当前目录: $(pwd)"
  
  # 删除下载的压缩包文件
  if [ -f "$TEMP_FILE" ]; then
    echo "发现下载的压缩包文件，正在删除: $TEMP_FILE"
    rm -f "$TEMP_FILE" || {
      echo "错误: 删除压缩包文件失败！"
      # 这里不退出，继续执行
    }
    echo "压缩包文件已删除: $TEMP_FILE"
  else
    echo "未发现下载的压缩包文件: $TEMP_FILE"
  fi
  
  # 检查并删除任何其他临时文件
  echo "检查其他临时文件..."
  for file in *.tar.gz; do
    if [ -f "$file" ]; then
      echo "发现其他临时压缩包文件，正在删除: $file"
      rm -f "$file" || {
        echo "警告: 删除临时文件失败: $file"
      }
    fi
  done
  
  echo "临时文件清理完成"
  echo
}

# 主流程函数
main() {
  echo "========================================="
  echo "YDB 服务端部署脚本"
  echo "========================================="
  echo
  
  # 1. 选择项目
  select_project
  
  # 2. 检查并创建目标目录
  if [ ! -d "$SELECTED_PATH" ]; then
    echo "目标目录不存在，正在创建: $SELECTED_PATH"
    mkdir -p "$SELECTED_PATH" || {
      echo "错误: 无法创建目标目录: $SELECTED_PATH"
      exit 1
    }
    echo "目标目录创建成功"
  fi
  
  # 3. 进入目标目录
  echo "正在进入目标目录: $SELECTED_PATH"
  cd "$SELECTED_PATH" || {
    echo "错误: 无法进入目标目录: $SELECTED_PATH"
    exit 1
  }
  echo "已进入目标目录，当前路径: $(pwd)"
  
  # 4. 拉取代码
  pull_code
  
  # 5. 解压代码
  extract_code
  
  # 6. 备份原有dist目录
  backup_dist
  
  # 7. 重命名目录
  rename_dist
  
  # 8. 清理临时文件
  clean_temp
  
  echo "========================================="
  echo "部署完成！"
  echo "项目: $SELECTED_PROJECT"
  echo "路径: $SELECTED_PATH/dist"
  echo "========================================="
}

# 执行主流程
main
