#!/usr/bin/env bash
set -Eeuo pipefail

# Deploy zhctprompt to the development server without a build step.
# Expected usage in Aliyun Flow:
#   bash deploy/aliyun-flow-deploy-zhctprompt.sh
#
# Optional environment variables:
#   DEPLOY_HOST=101.200.165.56
#   DEPLOY_USER=root
#   DEPLOY_PORT=22
#   DEPLOY_PATH=/workspace/developSite/zhctprompt
#   SSH_KEY=/path/to/private_key
#   DEPLOY_DELETE=1
#   PUBLIC_BASE_URL=http://zhctpmt.yyangpt.cn

DEPLOY_HOST="${DEPLOY_HOST:-101.200.165.56}"
DEPLOY_USER="${DEPLOY_USER:-root}"
DEPLOY_PORT="${DEPLOY_PORT:-22}"
DEPLOY_PATH="${DEPLOY_PATH:-/workspace/developSite/zhctprompt}"
DEPLOY_DELETE="${DEPLOY_DELETE:-1}"
PUBLIC_BASE_URL="${PUBLIC_BASE_URL:-http://zhctpmt.yyangpt.cn}"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"

if [[ ! -f "${REPO_ROOT}/README.md" || ! -d "${REPO_ROOT}/operation-manuals" ]]; then
  echo "[deploy] 当前目录不像 zhctprompt 仓库：${REPO_ROOT}" >&2
  exit 1
fi

if [[ -z "${DEPLOY_HOST}" || -z "${DEPLOY_USER}" || -z "${DEPLOY_PATH}" ]]; then
  echo "[deploy] DEPLOY_HOST / DEPLOY_USER / DEPLOY_PATH 不能为空" >&2
  exit 1
fi

case "${DEPLOY_PATH}" in
  /workspace/developSite/zhctprompt|/workspace/developSite/zhctprompt/)
    ;;
  *)
    echo "[deploy] 为避免误删，DEPLOY_PATH 只允许 /workspace/developSite/zhctprompt，当前：${DEPLOY_PATH}" >&2
    exit 1
    ;;
esac

command -v ssh >/dev/null 2>&1 || {
  echo "[deploy] 未找到 ssh 命令" >&2
  exit 1
}

command -v rsync >/dev/null 2>&1 || {
  echo "[deploy] 未找到 rsync 命令，请在云效流水线环境安装 rsync" >&2
  exit 1
}

SSH_OPTS=(
  -p "${DEPLOY_PORT}"
  -o StrictHostKeyChecking=no
  -o UserKnownHostsFile=/dev/null
)

if [[ -n "${SSH_KEY:-}" ]]; then
  SSH_OPTS+=(-i "${SSH_KEY}")
fi

RSYNC_OPTS=(
  -az
  --human-readable
  --itemize-changes
  --exclude=.git/
  --exclude=.DS_Store
  --exclude=.idea/
  --exclude=.vscode/
  --exclude=node_modules/
  --exclude=tmp/
  --exclude=.cache/
  --exclude=.pytest_cache/
)

if [[ "${DEPLOY_DELETE}" == "1" ]]; then
  RSYNC_OPTS+=(--delete)
fi

REMOTE="${DEPLOY_USER}@${DEPLOY_HOST}"

echo "[deploy] source: ${REPO_ROOT}/"
echo "[deploy] target: ${REMOTE}:${DEPLOY_PATH}/"
echo "[deploy] delete extra remote files: ${DEPLOY_DELETE}"

ssh "${SSH_OPTS[@]}" "${REMOTE}" "mkdir -p '${DEPLOY_PATH}'"

rsync "${RSYNC_OPTS[@]}" \
  -e "ssh ${SSH_OPTS[*]}" \
  "${REPO_ROOT}/" \
  "${REMOTE}:${DEPLOY_PATH}/"

ssh "${SSH_OPTS[@]}" "${REMOTE}" "
  set -e
  test -f '${DEPLOY_PATH}/operation-manuals/index.html'
  test -f '${DEPLOY_PATH}/docker/config/nginx/conf/mdview/index.html'
  chmod -R a+rX '${DEPLOY_PATH}'
"

echo "[deploy] zhctprompt 部署完成"
echo "[deploy] 访问入口：${PUBLIC_BASE_URL}/"
echo "[deploy] 操作手册：${PUBLIC_BASE_URL}/operation-manuals/index.html"
