#!/usr/bin/env bash
# JV 取得パラメータの試行錯誤ログ（正しい手順を決めるまで使う）
# 「この option が正解」と決めつけず、小さく叩いて結果を残す。
#
#   ./scripts/jv_fetch_param_probe.sh 2020
#   ./scripts/jv_fetch_param_probe.sh 2020 30   # max-records
#
set -euo pipefail

YEAR="${1:?usage: jv_fetch_param_probe.sh YYYY [max_records]}"
MAX="${2:-30}"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
# shellcheck source=/dev/null
source "${ROOT}/scripts/jv_load_env.sh"
cd "$ROOT"
export PYTHONPATH="${ROOT}${PYTHONPATH:+:$PYTHONPATH}"

LOG_DIR="${ROOT}/logs"
mkdir -p "$LOG_DIR"
OUT="${LOG_DIR}/jv_param_probe_${YEAR}_$(TZ=Asia/Tokyo date +%Y%m%d_%H%M%S).log"
RESULT_MD="${ROOT}/docs/ops_jv_fetch_param_results.md"
PY=(python3.11)
command -v "${PY[0]}" &>/dev/null || PY=(python3)
EXTRA=()
if [[ -n "${JV_FETCH_EXTRA:-}" ]]; then
  # shellcheck disable=SC2206
  EXTRA=(${JV_FETCH_EXTRA})
fi

log() {
  echo "[$(TZ=Asia/Tokyo date '+%F %T')] $*" | tee -a "$OUT"
}

record_types_after() {
  local id_b="$1"
  mysql keiba_ai -N -e \
    "SELECT GROUP_CONCAT(CONCAT(record_type,':',c) ORDER BY c DESC SEPARATOR ',')
     FROM (SELECT record_type, COUNT(*) c FROM jv_raw_records WHERE id>${id_b} GROUP BY record_type) t;" \
    2>/dev/null || echo "?"
}

ra_after() {
  local id_b="$1"
  mysql keiba_ai -N -e \
    "SELECT COUNT(*) FROM jv_raw_records WHERE id>${id_b} AND record_type='RA';" \
    2>/dev/null || echo "?"
}

log "=== param probe year=${YEAR} max=${MAX} ==="
if ! "${PY[@]}" scripts/jv_link_tcp_healthcheck.py >>"$OUT" 2>&1; then
  log "FAIL tunnel"
  exit 2
fi

CASES=(
  "opt1|${YEAR}0101||1"
  "opt4_setup|${YEAR}0101|${YEAR}1231|4"
  "opt3_setup|${YEAR}0101|${YEAR}1231|3"
  "opt4_from_range|${YEAR}0101-${YEAR}1231||4"
)

for case in "${CASES[@]}"; do
  IFS='|' read -r label from_dt to_dt opt <<<"$case"
  ID_B=$(mysql keiba_ai -N -e "SELECT COALESCE(MAX(id),0) FROM jv_raw_records;")
  log "--- CASE ${label} from=${from_dt} to=${to_dt:-none} option=${opt} ---"
  ARGS=( "${EXTRA[@]}" --from-datetime "$from_dt" --dataspec RACE --option "$opt" --max-records "$MAX" --busy-retries 5 --busy-sleep 5 )
  if [[ -n "$to_dt" ]]; then
    ARGS+=( --to-date "$to_dt" )
  fi
  set +e
  OUT_FETCH=$("${PY[@]}" collectors/fetch_jv_raw.py "${ARGS[@]}" 2>&1)
  RC=$?
  set -e
  echo "$OUT_FETCH" | tail -8 >>"$OUT"
  ADDED=$(( $(mysql keiba_ai -N -e "SELECT COUNT(*) FROM jv_raw_records;") - ID_B ))
  RT=$(record_types_after "$ID_B")
  RA=$(ra_after "$ID_B")
  log "RESULT label=${label} exit=${RC} added=${ADDED} ra_added=${RA} types=${RT}"
  {
    echo "| $(TZ=Asia/Tokyo date '+%F %T') | ${YEAR} | ${label} | opt=${opt} from=${from_dt} to=${to_dt:-} | max=${MAX} | exit=${RC} | +${ADDED} | RA+${RA} | ${RT} |"
  } >> "${RESULT_MD}.tmp"
  sleep 3
done

if [[ ! -f "$RESULT_MD" ]]; then
  cat >"$RESULT_MD" <<'HDR'
# JV 取得パラメータ試行ログ

**前提:** どの option / from / to が正しいかは環境・契約・JV 側次第。**決めつけず**小さく試し、この表に結果を足す。

| 日時 | 年 | ラベル | パラメータ | max | exit | raw+ | RA+ | 内訳 |
|------|-----|--------|------------|-----|------|------|-----|------|
HDR
fi
if [[ -f "${RESULT_MD}.tmp" ]]; then
  cat "${RESULT_MD}.tmp" >>"$RESULT_MD"
  rm -f "${RESULT_MD}.tmp"
fi

log "done log=${OUT} results=${RESULT_MD}"
