#!/bin/bash
# 夜間バッチ: ランキング・個人戦績キャッシュとAI用ゲームログを増分更新する。
# cron: 0 4 * * * /home/mit/zinro-nightly-warm.sh >> /home/mit/zinro-nightly-warm.log 2>&1
set -u

exec 9>/tmp/zinro-nightly-warm.lock
if ! flock -n 9; then
  echo "===== $(date '+%Y-%m-%d %H:%M:%S') nightly skipped: previous run is active ====="
  exit 0
fi

cd /var/www/html/zinro/jinro-api || exit 1

echo "===== $(date '+%Y-%m-%d %H:%M:%S') nightly start ====="

# 1) 通常ランキング・個人戦績キャッシュの増分バッチ
if [ -n "$(docker ps -q --filter name=^/zinro-stats-)" ]; then
  echo "stats batch already active; skip remaining jobs to avoid DB contention"
  exit 0
else
  docker compose run --rm --name zinro-stats-batch batch python batch.py
fi

# 1.5) トリップ変遷（系譜）テーブルの再構築
docker compose run --rm -v /home/mit/zinro_chains.py:/app/zinro_chains.py batch python zinro_chains.py

# 1.6) AI評価/因縁用ゲームログの増分収集
if [ -n "$(docker ps -q --filter name=^/zinro-log-crawler$)" ]; then
  echo "log crawler already active; skip"
else
  docker compose run --rm --name zinro-log-crawler -v /home/mit/zinro_log_crawler.py:/app/zinro_log_crawler.py batch python zinro_log_crawler.py
fi

# 1.7) 投票データ抽出・投票精度の再集計
docker compose run --rm -v /home/mit/zinro_votes.py:/app/zinro_votes.py batch python zinro_votes.py

# 2) 検索実績のある個人キャッシュの再温め + DBプリウォーム
docker compose run --rm -v /home/mit/zinro_warm.py:/app/zinro_warm.py batch python zinro_warm.py

# 3) AI解析は別ロック・別プロセスで起動する。
# 月次再評価が長時間続いても、翌日の通常夜間バッチを塞がない。
if [ -x /home/mit/zinro-ai/run_ai_daily.sh ]; then
  nohup /home/mit/zinro-ai/run_ai_daily.sh >> /home/mit/zinro-ai/daily.log 2>&1 </dev/null 9>&- &
  echo "AI daily triggered (pid=$!)"
fi

echo "===== $(date '+%Y-%m-%d %H:%M:%S') nightly end ====="
