#!/bin/bash
# CloudBase 数据同步脚本
# 运行所有 MCP pipeline → 上传更新的 JSON 到 CloudBase
set -e

WORKDIR="$HOME/Desktop/Hermes输出-工作类"
CB_ENV="bier-sales-d0gatbvlx288724e9"
LOG="$WORKDIR/数据/cb_sync.log"

# ─────────────────────────────────────────────────────────────────────────────
# 【必读】解释器必须钉死，不能用裸 `python3`
#   本脚本由 cron(no_agent) 执行，父进程是 zone-b gateway，其 PATH **首位**是
#     ~/.hermes/installs/<hash>/environments/<hash>/venv/bin
#   那个目录里的 python3 是 **Python 3.14.7，没有 pandas**。
#   而 PATH 里靠后的 /usr/bin/python3(3.9.6) 和 /opt/homebrew/bin/python3(3.14.3)
#   才有 pandas。
#   → 裸 `python3` 会命中 3.14.7 → 所有 `import pandas` 的脚本全崩，
#     而每行都带 `|| echo ⚠️` 兜底 → 任务照报 ok、tcb 照旧把**旧文件**推上线，
#     整条管道「静默空转」。2026-09-29 ~ 10-01 实测连续 3 天如此。
#   → 因此这里显式探测第一个能 import pandas 的解释器；探测失败则硬退出 1。
unset PYTHONPATH PYTHONHOME VIRTUAL_ENV   # 否则 3.14 venv 的 PYTHONPATH 会污染 3.9 的 C 扩展加载

PY=""
for _c in /usr/bin/python3 /opt/homebrew/bin/python3 /usr/local/bin/python3; do
  if [ -x "$_c" ] && "$_c" -c "import pandas" >/dev/null 2>&1; then PY="$_c"; break; fi
done
if [ -z "$PY" ]; then
  _w=$(command -v python3 2>/dev/null || true)
  if [ -n "$_w" ] && "$_w" -c "import pandas" >/dev/null 2>&1; then PY="$_w"; fi
fi
if [ -z "$PY" ]; then
  echo "=== $(date '+%Y-%m-%d %H:%M:%S') ❌ 致命：找不到带 pandas 的 python3，同步中止 ===" >> "$LOG"
  echo "FATAL: no pandas-capable python3 found (PATH=$PATH)" >&2
  exit 1
fi

FAIL=0
RUN_NOTE=""
_step() {  # $1=描述  $2=工作目录  $3..=命令
  local desc="$1"; local dir="$2"; shift 2
  echo ">>> $desc..." >> "$LOG"
  if ( cd "$dir" && "$@" ) >> "$LOG" 2>&1; then
    echo "  ✅ $desc" >> "$LOG"
  else
    echo "  ❌ $desc 失败" >> "$LOG"
    FAIL=$((FAIL + 1))
  fi
}

echo "=== $(date '+%Y-%m-%d %H:%M:%S') 开始同步 (py=$PY) ===" >> "$LOG"

# 1. MCP 刷新脚本（客诉+活动+阻塞）
_step "刷新 MCP 客诉+活动" "$WORKDIR/数据" "$PY" mcp_refresh.py

# 2. KPI pipeline
_step "刷新 KPI" "$WORKDIR/数据" "$PY" mcp_kpi_pipeline.py

# 3. 刷新 ERP 数据（kpi_progress 当月，正确口径）
_step "刷新 ERP 数据" "$WORKDIR/脚本" "$PY" refresh_erp.py

# 3b. 刷新 ERP 金额按天聚合（订单管理页按周/月/季/年统计用）
_step "刷新 ERP 金额聚合" "$WORKDIR/脚本" "$PY" refresh_erp_amount.py

# 3c. 重建客户360档案（销售额取 ERP 权威口径，必须排在 refresh_erp_amount 之后）
_step "重建客户360档案" "$WORKDIR/脚本" "$PY" build_customer_360.py

# 3d. 聚合客户档案完善情报 → 作战地图数据源（必须排在 3c 之后）
_step "聚合客户档案（作战地图）" "$WORKDIR/脚本" "$PY" build_customer_dossier.py

# 3e. 刷新重点客户档案的 2026 销售额（ERP 权威口径）
#     ⚠️ 必须排在 3b(refresh_erp_amount) 之后：两者都从同一份最新 ERP 聚合，
#     但 3e 是「按客户」聚合，_key_customers 的 sales_2026 原先停在一份 H1 快照
#     （latest_date=2026-06-30、合计 2181.7万），而无任何脚本负责重算它。
#     前端「客户」Tab 的「2026累计采购」列 + 客户360 都依赖该字段。
_step "刷新重点客户 2026 销售额" "$WORKDIR/脚本" "$PY" refresh_key_customers.py --apply

# 3f. 重建 ERP 派生物
#     ⚠️ 2026-10-01 新增：这 4 个构建脚本原先**既不在本脚本的构建链、也不在 FILES 部署清单**
#     → 线上这 6 个 JSON 长期停在旧日期（实测停在 09-24，落后 7 天）。
#     必须在 ERP 主管道(3) + refresh_erp_amount(3b) + refresh_key_customers(3e) 之后重跑。
_step "重建价格索引"   "$WORKDIR" "$PY" "$WORKDIR/脚本/build_price_index.py"
_step "重建订单数据"   "$WORKDIR" "$PY" "$WORKDIR/脚本/build_order_data.py"
_step "重建订单明细"   "$WORKDIR" "$PY" "$WORKDIR/脚本/gen_orders_detail.py"
_step "重建产品BOM"    "$WORKDIR" "$PY" "$WORKDIR/脚本/build_product_mapping.py"

# 4. 合并所有数据 JSON 为单一文件（必须在部署 FILES 之前，供前端读内嵌数据）
_step "合并 workbench_data.json" "$WORKDIR" "$PY" "$WORKDIR/脚本/merge_workbench_data.py"

# 5. 上传所有数据 JSON 到 CloudBase
cd "$WORKDIR"
echo ">>> 上传数据文件到 CloudBase..." >> "$LOG"

if ! command -v tcb >/dev/null 2>&1; then
  echo "  ❌ 致命：PATH 里找不到 tcb，无法部署" >> "$LOG"
  FAIL=$((FAIL + 1))
fi

FILES=(
  "数据/mcp_customers.json"
  "数据/mcp_complaints.json"
  "数据/opportunity_sandbox.json"
  "数据/shipment_status.json"
  "数据/kpi_dashboard.json"
  "数据/kpi_progress.json"
  "数据/erp_amount.json"
  "数据/three_year_monthly.json"
  "数据/customer_360.json"
  "数据/customer_dossier.json"
  "数据/my_activities.json"
  "数据/pricing/_key_customers.json"
  "数据/pricing/_personnel.json"
  # ⚠️ 2026-10-01 新增（7 个派生物）：原先不在本清单 → 线上长期停在旧日期（实测落后 7 天）。
  #    这些由 3f 重建；若在此漏列，重建了也上不了线。
  "数据/price_index.json"
  "数据/order_sku_index.json"
  "数据/customer_price_history.json"
  "数据/customer_order_context.json"
  "数据/orders_detail_2026.json"
  "数据/product_bom_map.json"
  "数据/product_parent_child_map.json"
)

for f in "${FILES[@]}"; do
  if [ -f "$f" ]; then
    if tcb hosting deploy "$f" "$f" -e "$CB_ENV" >> "$LOG" 2>&1; then
      echo "  ✓ $f" >> "$LOG"
    else
      echo "  ✗ $f" >> "$LOG"
      FAIL=$((FAIL + 1))
    fi
  else
    echo "  ⚠️ 缺文件 $f（跳过）" >> "$LOG"
  fi
done

# 6. 上传合并文件 + 部署 HTML 到 CloudBase
echo ">>> 上传合并数据 + HTML..." >> "$LOG"
for pair in "数据/workbench_data.json:数据/workbench_data.json" "工具/index.html:/workbench/index.html" "工具/app.html:/workbench/app.html" "工具/仪表盘/三部门逐月拆分_demo.html:/workbench/仪表盘/三部门逐月拆分_demo.html"; do
  src="${pair%%:*}"; dst="${pair##*:}"
  if tcb hosting deploy "$WORKDIR/$src" "$dst" -e "$CB_ENV" >> "$LOG" 2>&1; then
    echo "  ✓ $dst" >> "$LOG"
  else
    echo "  ✗ $dst" >> "$LOG"
    FAIL=$((FAIL + 1))
  fi
done

# ─── 收尾：失败必须可见 ───────────────────────────────────────────────────────
if [ "$FAIL" -gt 0 ]; then
  RUN_NOTE="❌ 同步完成，但有 $FAIL 处失败"
else
  RUN_NOTE="✅ 同步完成，全部成功"
fi
echo "=== $(date '+%Y-%m-%d %H:%M:%S') $RUN_NOTE ===" >> "$LOG"
echo "" >> "$LOG"

if [ "$FAIL" -gt 0 ]; then
  echo "$RUN_NOTE（详见 $LOG）" >&2
  exit 1
fi
exit 0
