#!/usr/bin/env bash
# 一键发布测试：
#   1) admin 目录 npm run build
#   2) uniapp 目录 npm run build:h5
#   3) 提交 server 代码到 git 并推送
#
# 用法:
#   bash release.sh                      # 自动用时间戳作为提交信息
#   bash release.sh "fix: short link"    # 自定义提交信息
#   ./release.sh "msg"                   # 已 chmod +x 后

set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT_DIR"

MESSAGE="${1:-release: $(date '+%Y-%m-%d %H:%M:%S')}"

# ANSI 颜色（支持 git bash / wsl / linux / macOS）
if [ -t 1 ]; then
    CYAN=$'\033[36m'
    YELLOW=$'\033[33m'
    GREEN=$'\033[32m'
    GRAY=$'\033[90m'
    RESET=$'\033[0m'
else
    CYAN=""; YELLOW=""; GREEN=""; GRAY=""; RESET=""
fi

step() { echo; echo "${CYAN}==> $1${RESET}"; }
run() {
    local cwd="$1"; shift
    echo "${GRAY}[$cwd] $*${RESET}"
    (cd "$cwd" && "$@")
}

# 1. 构建 admin
step "构建 admin (npm run build)"
run "$ROOT_DIR/admin" npm run build

# 2. 构建 uniapp H5
step "构建 uniapp H5 (npm run build:h5)"
run "$ROOT_DIR/uniapp" npm run build:h5

# 3. 提交 server（server 是独立 git 仓库，使用其自身的 .git）
SERVER_DIR="$ROOT_DIR/server"
if [ ! -d "$SERVER_DIR/.git" ]; then
    echo "${YELLOW}server/.git 不存在，跳过 git 步骤${RESET}"
else
    step "提交 server 代码"
    if [ -z "$(git -C "$SERVER_DIR" status --porcelain)" ]; then
        echo "${YELLOW}server 仓库无变更，跳过 commit${RESET}"
    else
        git -C "$SERVER_DIR" add -A
        git -C "$SERVER_DIR" commit -m "$MESSAGE"
    fi

    step "推送到远端"
    BRANCH="$(git -C "$SERVER_DIR" rev-parse --abbrev-ref HEAD)"
    if git -C "$SERVER_DIR" rev-parse --abbrev-ref --symbolic-full-name "@{u}" >/dev/null 2>&1; then
        git -C "$SERVER_DIR" push
    else
        # 尚未设置上游：默认推到 origin/<当前分支>
        git -C "$SERVER_DIR" push -u origin "$BRANCH"
    fi
fi

echo
echo "${GREEN}✓ 发布完成${RESET}"
