#!/bin/bash

# 设置变量
PROJECT_NAME="bd-app"
DOCKER_IMAGE_NAME="bd-app"
REMOTE_REGISTRY=${REMOTE_REGISTRY:-"docker.xt.wenhq.top:8083/bd"}
VERSION_FILE="version"
LOG_FILE="deploy.log"

# 日志函数
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}

# 读取当前版本号
CURRENT_VERSION=$(cat $VERSION_FILE)
if [ -z "$CURRENT_VERSION" ]; then
  CURRENT_VERSION="0.0"
fi

# 分离大版本号和小版本号
CURRENT_MAJOR=$(echo $CURRENT_VERSION | cut -d'.' -f1)
CURRENT_MINOR=$(echo $CURRENT_VERSION | cut -d'.' -f2)

# 用户选择是否修改大版本号
read -p "是否修改大版本号？(a/i/ne): " modify_major_version

if [ "$modify_major_version" == "a" ]; then
  CURRENT_MAJOR=$((CURRENT_MAJOR + 1))
  CURRENT_MINOR=0  # 重置小版本号
elif [ "$modify_major_version" == "i" ]; then
  CURRENT_MINOR=$((CURRENT_MINOR + 1))  # 增加小版本号
else
  echo "跳过版本号修改"
fi

# 更新版本号
NEXT_VERSION="${CURRENT_MAJOR}.${CURRENT_MINOR}"
echo $NEXT_VERSION > $VERSION_FILE
echo  -e "\e[1;34;42m版本号：" $NEXT_VERSION " 日期：$(date +"%Y-%m-%d %H:%M:%S")" "\e[0m"
# 用户选择执行的步骤
echo "请选择要执行的步骤（输入数字）："
echo "1. 编译bd-app项目"
echo "2. 构建Docker镜像"
echo "3. 推送Docker镜像到远程仓库"
echo "4. 执行所有步骤"
read -p "请输入选项（1/2/3/4）: " choice

# 编译项目
compile_project() {
  log "开始编译bd-app项目..."
  yarn run build:prod
  if [ $? -ne 0 ]; then
    log "bd-app项目编译失败。退出脚本。"
    exit 1
  fi
  log "bd-app项目编译完成"
}

# 构建Docker镜像
build_docker_image() {
  log "开始构建Docker镜像..."
  docker build -t ${REMOTE_REGISTRY}/${DOCKER_IMAGE_NAME}:v${NEXT_VERSION} .
  if [ $? -ne 0 ]; then
    log "Docker镜像构建失败。退出脚本。"
    exit 1
  fi
  log "Docker镜像构建完成"
}

# 推送Docker镜像到远程仓库
push_docker_image() {
  log "开始推送Docker镜像到远程仓库..."
  docker push ${REMOTE_REGISTRY}/${DOCKER_IMAGE_NAME}:v${NEXT_VERSION}
  if [ $? -ne 0 ]; then
    log "Docker镜像推送失败。退出脚本。"
    exit 1
  fi
  log "Docker镜像推送完成"
}

# 根据用户选择执行相应的步骤
case $choice in
  1)
    compile_project
    ;;
  2)
    build_docker_image
    ;;
  3)
    push_docker_image
    ;;
  4)
    compile_project
    build_docker_image
    push_docker_image
    ;;
  *)
    log "无效的选项。退出脚本。"
    exit 1
    ;;
esac

log "所有任务完成"
