#!/usr/bin/env bash
#
# LEGACY bash archive helper. On the Windows PC (Dropbox), prefer
# EtherGold/sync/archive_session.ps1 — archives go to <workspace>/sessions/
# (sibling of EtherGold/), not EtherGold/dev/sessions.
#
# Usage:
#   SESSION_LABEL=keno-round1 ./archive_session.sh
#   ./archive_session.sh "after-script-rollback"
#
# Env:
#   SESSION_LABEL=     optional tag
#   FIXTURE_ROOT=      default: EtherGold/ (parent of sync/)
#   SESSIONS_ROOT=     default: <project>/sessions
#   DIFF_BASELINE=     optional sessions subfolder name to diff against
#   SKIP_DIFF=1        skip diff_sessions.py

set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FIXTURE_ROOT="${FIXTURE_ROOT:-$(cd "${ROOT}/.." && pwd)}"
if [[ -n "${SESSIONS_ROOT:-}" ]]; then
  SESSIONS_DIR="${SESSIONS_ROOT}"
else
  SESSIONS_DIR="$(cd "${FIXTURE_ROOT}/.." && pwd)/sessions"
fi
TIMING_DIR="${FIXTURE_ROOT}/dev"
LABEL="${SESSION_LABEL:-${1:-}}"

echo "NOTE: prefer archive_session.ps1 on Windows PC; this script is legacy." >&2
echo "SessionsDir=${SESSIONS_DIR}" >&2

mkdir -p "${SESSIONS_DIR}"

STAMP=""
META_LINE=""
EVENTS_CANDIDATES=(
  "${FIXTURE_ROOT}/logs/1/data/events.jsonl"
  "${FIXTURE_ROOT}/1/data/events.jsonl"
)
for evf in "${EVENTS_CANDIDATES[@]}"; do
  if [[ -f "${evf}" ]]; then
    META_LINE="$(head -n 1 "${evf}" || true)"
    break
  fi
done
if [[ -n "${META_LINE}" ]] && command -v python3 >/dev/null 2>&1; then
  STAMP="$(python3 -c "
import json, sys
from datetime import datetime
line = sys.stdin.read().strip()
try:
    row = json.loads(line)
    utc = row.get('utc', '')
    if utc:
        dt = datetime.fromisoformat(utc.replace('Z', '+00:00'))
        print(dt.strftime('%Y-%m-%d_%H%M-UTC'))
except Exception:
    pass
" <<< "${META_LINE}")"
fi

if [[ -z "${STAMP}" ]]; then
  STAMP="$(date -u +%Y-%m-%d_%H%M-UTC 2>/dev/null || date +%Y-%m-%d_%H%M-UTC)"
fi

if [[ -n "${LABEL}" ]]; then
  SAFE_LABEL="$(echo "${LABEL}" | tr ' ' '-' | tr -cd '[:alnum:]_-.')"
  DEST_NAME="${STAMP}_${SAFE_LABEL}"
else
  DEST_NAME="${STAMP}"
fi

DEST="${SESSIONS_DIR}/${DEST_NAME}"
if [[ -e "${DEST}" ]]; then
  DEST="${DEST}_$(date +%s)"
  DEST_NAME="$(basename "${DEST}")"
fi

mkdir -p "${DEST}"

for n in 1 2 3 4 5; do
  SRC=""
  if [[ -d "${FIXTURE_ROOT}/logs/${n}" ]]; then
    SRC="${FIXTURE_ROOT}/logs/${n}"
  elif [[ -d "${FIXTURE_ROOT}/${n}" ]]; then
    SRC="${FIXTURE_ROOT}/${n}"
  fi
  if [[ -n "${SRC}" ]]; then
    echo "Archiving position ${n} -> ${DEST}/${n}/"
    mkdir -p "${DEST}/${n}"
    if command -v rsync >/dev/null 2>&1; then
      rsync -a "${SRC}/" "${DEST}/${n}/"
    else
      cp -a "${SRC}/." "${DEST}/${n}/"
    fi
  fi
done

if [[ -d "${TIMING_DIR}" ]]; then
  mkdir -p "${DEST}/scripts"
  for f in diff_sessions.py pog422_core.py fixture_pc_paths.py; do
    if [[ -f "${TIMING_DIR}/${f}" ]]; then
      cp -a "${TIMING_DIR}/${f}" "${DEST}/scripts/"
    fi
  done
fi

{
  echo "Archived: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
  echo "Source: ${FIXTURE_ROOT}"
  echo "SessionsRoot: ${SESSIONS_DIR}"
  echo "Folder: ${DEST_NAME}"
  if [[ -n "${LABEL}" ]]; then
    echo "Label: ${LABEL}"
  fi
  echo ""
  echo "Diff (from EtherGold/dev):"
  echo "  python diff_sessions.py ../../sessions/BASELINE ../../sessions/${DEST_NAME}"
} > "${DEST}/SESSION.txt"

echo "Archived to: ${DEST}"
echo "SESSION.txt written."

if [[ "${SKIP_DIFF:-0}" != "1" && -n "${DIFF_BASELINE:-}" ]]; then
  DIFF_PY="${TIMING_DIR}/diff_sessions.py"
  BASE="${SESSIONS_DIR}/${DIFF_BASELINE}"
  if [[ -f "${DIFF_PY}" && -d "${BASE}" ]]; then
    REPORT="${SESSIONS_DIR}/SESSION_DIFF_${DIFF_BASELINE}_vs_${DEST_NAME}.txt"
    python3 "${DIFF_PY}" "${BASE}" "${DEST}" -o "${REPORT}" || true
    echo "Diff report: ${REPORT}"
  fi
fi
