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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ASSET_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
REPO_ROOT="$(cd "$ASSET_ROOT/../.." && pwd)"
TARGET_VUS=100
REAL_USER_COUNT=30
RAMP_DURATION=5m
HOLD_DURATION=30m
REAL_TEST_DURATION=20m
ACCOUNTS_FILE="${ACCOUNTS_FILE:-$ASSET_ROOT/data/accounts.csv}"

cd "$REPO_ROOT"
node "$ASSET_ROOT/tools/live-load-config.mjs" "$ACCOUNTS_FILE" "$TARGET_VUS" "$HOLD_DURATION"

printf '\n联合测试配置\n'
printf -- '- k6模拟：%s VU\n' "$TARGET_VUS"
printf -- '- 真实用户：%s名真实用户\n' "$REAL_USER_COUNT"
printf -- '- 升压：%s；稳定保持：%s；真人操作：%s\n' "$RAMP_DURATION" "$HOLD_DURATION" "$REAL_TEST_DURATION"
printf -- '- T+5分钟：通知30名真实用户同时开始操作\n'
printf -- '- T+25分钟：通知真实用户停止操作并填写记录\n'
printf -- '- T+35分钟：k6开始降压\n\n'

if [[ "${HYBRID_DRY_RUN:-}" == '1' ]]; then
  echo '离线校验完成，未发送生产请求。'
  echo '正式执行：CONFIRM_PRODUCTION_LOAD_TEST=CQHW-LIVE-LOAD work_chongqing_huanwei/performance-testing/scripts/run-hybrid-100vu-30real.sh'
  exit 0
fi

if [[ "${CONFIRM_PRODUCTION_LOAD_TEST:-}" != 'CQHW-LIVE-LOAD' ]]; then
  echo '未发送生产请求。正式执行需设置：CONFIRM_PRODUCTION_LOAD_TEST=CQHW-LIVE-LOAD' >&2
  exit 2
fi

notify() {
  local message="$1"
  printf '\n%s\n\a' "$message"
  if command -v osascript >/dev/null 2>&1; then
    osascript -e "display notification \"$message\" with title \"重庆环卫联合压测\"" >/dev/null 2>&1 || true
  fi
}

(
  sleep 300
  notify '[T+5分钟] 100 VU已进入稳定阶段，请通知30名真实用户同时开始操作。'
  sleep 1200
  notify '[T+25分钟] 真人操作20分钟结束，请停止操作并填写流畅度记录。'
  sleep 600
  notify '[T+35分钟] 稳定保持结束，k6即将进入2分钟降压阶段。'
) &
reminder_pid=$!

cleanup_reminder() {
  kill "$reminder_pid" >/dev/null 2>&1 || true
  wait "$reminder_pid" >/dev/null 2>&1 || true
}
trap cleanup_reminder EXIT

RAMP_DURATION="$RAMP_DURATION" \
ACCOUNTS_FILE="$ACCOUNTS_FILE" \
CONFIRM_PRODUCTION_LOAD_TEST="$CONFIRM_PRODUCTION_LOAD_TEST" \
"$SCRIPT_DIR/run-live-dashboard.sh" "$TARGET_VUS" "$HOLD_DURATION"
