#!/usr/bin/env bash
# 1年を月単位で setup(option=3) 取得 → 増分正規化（jv_open タイムアウト回避用）
#
#   ./scripts/jv_fetch_year_by_month.sh 2020
#
set -euo pipefail

YEAR="${1:?usage: jv_fetch_year_by_month.sh YYYY}"

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"
STAMP="$(TZ=Asia/Tokyo date +%Y%m%d_%H%M%S)"
LOG="${LOG_DIR}/jv_fetch_year_by_month_${YEAR}.${STAMP}.log"
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
HOST="${JVLINK_SERVER_HOST:-127.0.0.1}"
PORT="${JVLINK_SERVER_PORT:-8765}"
BUSY_R="${JV_BUSY_RETRIES:-30}"
BUSY_S="${JV_BUSY_SLEEP_SEC:-20}"

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

days_in_month() {
  local y="$1" m="$2"
  case "$m" in
    01|03|05|07|08|10|12) echo 31 ;;
    04|06|09|11) echo 30 ;;
    02)
      if (( y % 400 == 0 || (y % 4 == 0 && y % 100 != 0) )); then echo 29; else echo 28; fi
      ;;
    *) echo 30 ;;
  esac
}

races_jra_year() {
  mysql keiba_ai -N -e \
    "SELECT COUNT(*) FROM races WHERE circuit='JRA' AND YEAR(race_date)=${YEAR};" 2>/dev/null || echo "?"
}

log "=== year-by-month ${YEAR} log=${LOG} ==="
if ! "${PY[@]}" scripts/jv_link_tcp_healthcheck.py >>"$LOG" 2>&1; then
  log "ERROR: tunnel NG"
  exit 2
fi

RACES_B=$(races_jra_year)
log "before: races_jra_${YEAR}=${RACES_B}"

for m in 01 02 03 04 05 06 07 08 09 10 11 12; do
  last_day=$(days_in_month "$YEAR" "$m")
  from_dt="${YEAR}${m}01"
  to_dt="${YEAR}${m}${last_day}"
  ID_B=$(mysql keiba_ai -N -e "SELECT COALESCE(MAX(id),0) FROM jv_raw_records;")
  log "FETCH month=${m} from=${from_dt} to=${to_dt} option=3"
  set +e
  "${PY[@]}" collectors/fetch_jv_raw.py \
    "${EXTRA[@]}" --host "$HOST" --port "$PORT" \
    --busy-retries "$BUSY_R" --busy-sleep "$BUSY_S" \
    --from-datetime "$from_dt" --to-date "$to_dt" \
    --dataspec RACE --option 3 >>"$LOG" 2>&1
  RC=$?
  set -e
  ADDED=$(( $(mysql keiba_ai -N -e "SELECT COUNT(*) FROM jv_raw_records;") - ID_B ))
  log "month=${m} exit=${RC} raw_added=${ADDED}"
  if (( ADDED > 0 )); then
    log "NORMALIZE from-id=$((ID_B + 1))"
    "${PY[@]}" collectors/normalize_jv_raw.py --from-id "$((ID_B + 1))" --batch-size 5000 >>"$LOG" 2>&1
    RACES_N=$(races_jra_year)
    log "after month=${m}: races_jra_${YEAR}=${RACES_N}"
  fi
  sleep 5
done

RACES_A=$(races_jra_year)
log "done: races_jra_${YEAR}=${RACES_A} (was ${RACES_B}) delta=$((RACES_A - RACES_B))"
if (( RACES_A >= 3000 )); then
  exit 0
fi
exit 1
