#!/usr/bin/env bash
# tradingSystem (PMS) 一键部署
# ---------------------------------------------------------------------------
# 为什么需要它: 源码是**打进镜像**的 (docker-compose.yml 只挂了 ./logs), 所以
# `docker compose restart` 只是把老容器停了再起, 跑的还是旧镜像里的旧代码 ——
# 改完代码 restart 一下看不到变化, 而且**一点报错都没有**, 排查时极其误导。
# 代码改动要生效必须 build + force-recreate, 这个脚本就是干这个的。
#
# 用法:
#   ./scripts/deploy.sh                拉代码 → 重建镜像 → 重建服务 → 报状态
#   ./scripts/deploy.sh --no-pull      跳过 git pull (本地已改好, 不想拉远端)
#   PROFILES="--profile ws" ./scripts/deploy.sh    只跑页面 + ws (默认 sched+ws)
# ---------------------------------------------------------------------------
set -euo pipefail
cd "$(dirname "$0")/.."

PROFILES="${PROFILES:---profile sched --profile ws}"
DC=(docker compose $PROFILES)

if [[ "${1:-}" != "--no-pull" ]]; then
  echo "==> git pull"
  git pull --ff-only
fi

if [[ -f docker-compose.override.yml ]]; then
  echo "==> 检测到 docker-compose.override.yml (源码已挂载)"
  echo "    改 Python 代码不用跑本脚本, 直接 'docker compose restart' 即可。"
  echo "    仍然重建一次, 以防你改的是 requirements.txt。"
fi

echo "==> 重建镜像"
"${DC[@]}" build

echo "==> 重建容器 (force-recreate: 让新镜像真正生效)"
"${DC[@]}" up -d --force-recreate

echo
"${DC[@]}" ps
echo
echo "==> 建表/补表 (幂等)"
docker compose run --rm --no-deps pms-web python scripts/init_db.py --yes || {
  echo "建表失败 —— 上面有原因, 服务已经起来了, 修完重跑本脚本即可"; exit 1; }

echo
echo "完成。ws 通道状态:"
echo "  docker compose run --rm --no-deps pms-web python scripts/ws_smoke.py status"
