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

# 张家港首次代码部署：业务标识固定为 zhangjiagang。
# 三个压缩包由跳板电脑下载后 SCP 到服务器，不在本脚本中联网下载。
# wget https://img.kxunpt.cn/zhct_xwq/resource/zhct_217.tgz
# wget https://img.kxunpt.cn/zhct_xwq/resource/aizhct_113.tgz
# wget https://img.kxunpt.cn/zhct_xwq/resource/store_23.tgz

readonly PACKAGE_DIR=/root/zhangjiagang-deploy
readonly ROOT_DIR=/workspace/wwwroot
readonly STORE_DIR=${ROOT_DIR}/zhct_zhangjiagang/project
readonly AI_DIR=${ROOT_DIR}/aizhct_zhangjiagang/project
readonly EXPECTED_STORE=de70601c5c23c7e23b76c93f1f8fca2f7b7efc8642b998f507daa52d06105b76
readonly EXPECTED_AI=4d9caa5efe0bf0a8ccc67025874b30b3dcf8b05c085dde149983c3488272abdb
readonly EXPECTED_AI_STORE=e4a1692ace3fd31a13b080d79d75ae606f2ee8f20631baf5f0d0c0c092e5a3de

fail() { printf 'ERROR: %s\n' "$*" >&2; exit 1; }

preflight() {
  [[ $(id -u) -eq 0 ]] || fail '必须由 root 运行'
  [[ -d /workspace ]] || fail '/workspace 不存在；先确认磁盘及目录规划'
  [[ -d /home/wwwroot ]] || fail 'LNMP /home/wwwroot 不存在'
  [[ ! -e ${STORE_DIR} && ! -e ${AI_DIR} ]] || fail '目标项目目录已存在；不得按首次部署覆盖'
  for file in zhct_217.tgz aizhct_113.tgz store_23.tgz; do
    [[ -s ${PACKAGE_DIR}/${file} ]] || fail "缺少压缩包：${PACKAGE_DIR}/${file}"
    tar -tzf "${PACKAGE_DIR}/${file}" >/dev/null || fail "压缩包损坏：${file}"
  done
  printf '%s  %s\n' "${EXPECTED_STORE}" "${PACKAGE_DIR}/zhct_217.tgz" |
    sha256sum -c - || fail 'Store 包 SHA256 不符'
  printf '%s  %s\n' "${EXPECTED_AI}" "${PACKAGE_DIR}/aizhct_113.tgz" |
    sha256sum -c - || fail 'AI API 包 SHA256 不符'
  printf '%s  %s\n' "${EXPECTED_AI_STORE}" "${PACKAGE_DIR}/store_23.tgz" |
    sha256sum -c - || fail 'AI Store 包 SHA256 不符'
  tar -tzf "${PACKAGE_DIR}/zhct_217.tgz" | grep -F './db/init/zhangjiagang/zhct_zhangjiagang.sql' >/dev/null || fail 'Store 包缺少业务库 SQL'
  tar -tzf "${PACKAGE_DIR}/zhct_217.tgz" | grep -F './db/init/zhangjiagang/aizhct_zhangjiagang.sql' >/dev/null || fail 'Store 包缺少 AI 库 SQL'
  tar -tzf "${PACKAGE_DIR}/aizhct_113.tgz" | grep -F './.env.prodaizhct_zhangjiagang' >/dev/null || fail 'AI API 包缺少张家港环境文件'
  printf '预检通过：目标为空，新版压缩包完整。\n'
}

deploy_code() {
  preflight
  mkdir -p "${STORE_DIR}" "${AI_DIR}" \
    "${ROOT_DIR}/log/zhct_zhangjiagang" "${ROOT_DIR}/log/aizhct_zhangjiagang" \
    /workspace/wwwlogs /var/log/supervisor
  tar -xzf "${PACKAGE_DIR}/zhct_217.tgz" -C "${STORE_DIR}" --no-same-owner
  tar -xzf "${PACKAGE_DIR}/aizhct_113.tgz" -C "${AI_DIR}" --no-same-owner
  mkdir -p "${STORE_DIR}/public/store" "${STORE_DIR}/public/static" \
    "${AI_DIR}/public/uploads" "${AI_DIR}/public/temp"
  tar -xzf "${PACKAGE_DIR}/store_23.tgz" -C "${STORE_DIR}/public/store" --no-same-owner
  chown -R www:www "${ROOT_DIR}/zhct_zhangjiagang" "${ROOT_DIR}/aizhct_zhangjiagang" \
    "${ROOT_DIR}/log/zhct_zhangjiagang" "${ROOT_DIR}/log/aizhct_zhangjiagang"
  [[ -s ${STORE_DIR}/env.php && -s ${AI_DIR}/env.php ]] || fail '解压后 env.php 缺失'
  [[ -s ${STORE_DIR}/public/store/index.html ]] || fail 'AI Store 页面缺失'
  printf '代码部署完成；尚未初始化数据库或启用站点。\n'
}

case "${1:-}" in
  check) preflight ;;
  code) deploy_code ;;
  *) printf '用法: %s {check|code}\n' "$0" >&2; exit 2 ;;
esac
