#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT"
if [ "$#" -ne 3 ]; then
  echo "Usage: bash run_issue.sh YYYY MM DD" >&2
  echo "Example: bash run_issue.sh 2021 01 01" >&2
  exit 2
fi
YYYY=$(printf "%04d" "$1")
MM=$(printf "%02d" "$2")
DD=$(printf "%02d" "$3")
ISSUE_ID="${YYYY}${MM}${DD}"
mkdir -p outputs/{logs,tasks,status,report,model_cache,monthly_final,locks}
LOG="outputs/logs/run_issue_${ISSUE_ID}_$(date +%Y%m%d_%H%M%S).log"
exec > >(tee -a "$LOG") 2>&1
if [ ! -f "$ROOT/venv_drought/bin/activate" ]; then
  echo "ERROR: Missing venv_drought. Run: bash setup_gd2.sh" >&2
  exit 3
fi
source "$ROOT/venv_drought/bin/activate"
export PYTHONPATH="$ROOT:${PYTHONPATH:-}"
export PYTHONUNBUFFERED=1
export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMEXPR_NUM_THREADS=1
export GD2_NO_ONDEMAND_FIT="${GD2_NO_ONDEMAND_FIT:-1}"
LOCKDIR="outputs/locks/issue_${ISSUE_ID}.lock"
if ! mkdir "$LOCKDIR" 2>/dev/null; then
  echo "ERROR: issue ${ISSUE_ID} is already locked/running. Remove $LOCKDIR only if no job is running." >&2
  exit 4
fi
trap 'rmdir "$LOCKDIR" 2>/dev/null || true' EXIT

echo "[$(date '+%F %T')] START GĐ2 issue ${ISSUE_ID}"
python scripts/01_preflight_runtime.py
python scripts/00_check_ope_config.py
python scripts/10_discover_issues.py >/dev/null
grep -q "${ISSUE_ID}" outputs/tasks/operational_issues.csv || { echo "ERROR: issue ${ISSUE_ID} not found in outputs/tasks/operational_issues.csv" >&2; exit 5; }
if [ "${GD2_SKIP_CACHE_CHECK:-0}" != "1" ]; then
  python scripts/09_check_model_cache.py --strict
fi
python -u scripts/20_run_issue.py --issue-id "${ISSUE_ID}"
python scripts/30_finalize_monthly.py
python scripts/41_make_issue_forecast_maps.py --issue-id "${ISSUE_ID}"
python scripts/40_make_ope_html.py
OUTDIR="outputs/${YYYY}/${MM}/${DD}"
test -s "${OUTDIR}/Ope_Pr_T2_and_Ano.nc"
test -s "${OUTDIR}/Dr_Prob.nc"
echo "[$(date '+%F %T')] DONE GĐ2 issue ${ISSUE_ID}: ${OUTDIR}"
