#!/usr/bin/env bash
# Push latest ~/p3-grabs capture to Dropbox Screenshots/P3 Grabs (Pi -> PC via rclone).
# LATEST.txt holds a basename or relative path under GRABS (e.g. pos5/T340_pos5_tidD249_....tga).
set -euo pipefail
if grep -q $'\r' "${BASH_SOURCE[0]}" 2>/dev/null; then
  sed -i 's/\r$//' "${BASH_SOURCE[0]}"
  exec bash "${BASH_SOURCE[0]}" "$@"
fi

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="${ROOT}/rclone.env"
GRABS="${HOME}/p3-grabs"
LATEST_FILE="${GRABS}/LATEST.txt"

if [[ ! -f "${LATEST_FILE}" ]]; then
  echo "p3_grab_sync: no LATEST.txt — skip" >&2
  exit 0
fi

if [[ ! -f "${ENV_FILE}" ]]; then
  echo "p3_grab_sync: no rclone.env — files stay on Pi only" >&2
  exit 0
fi

# shellcheck source=/dev/null
source "${ENV_FILE}"
# shellcheck source=dropbox_paths.sh
source "${ROOT}/dropbox_paths.sh"

RCLONE_REMOTE="${RCLONE_REMOTE:?Set RCLONE_REMOTE in rclone.env}"
DEST="${DROPBOX_P3_GRABS_CANON:?missing DROPBOX_P3_GRABS_CANON in dropbox_paths.sh}"
REMOTE="${RCLONE_REMOTE}:${DEST}"

if ! command -v rclone >/dev/null 2>&1; then
  echo "p3_grab_sync: rclone not installed — skip" >&2
  exit 0
fi

# Strip CR/LF; allow relative path under GRABS.
LATEST="$(tr -d '\r\n' < "${LATEST_FILE}")"
LATEST="${LATEST#./}"
# Safety: refuse absolute or parent escapes.
if [[ "${LATEST}" = /* || "${LATEST}" == *".."* ]]; then
  echo "p3_grab_sync: refusing unsafe LATEST path: ${LATEST}" >&2
  exit 1
fi

REL_DIR="$(dirname "${LATEST}")"
BASE_NAME="$(basename "${LATEST}")"
BASE_STEM="${BASE_NAME%.tga}"

if [[ "${REL_DIR}" == "." ]]; then
  REMOTE_SUB="${REMOTE}/"
  LOCAL_DIR="${GRABS}"
else
  REMOTE_SUB="${REMOTE}/${REL_DIR}/"
  LOCAL_DIR="${GRABS}/${REL_DIR}"
fi

copy_one() {
  local f="$1"
  local remote_dir="$2"
  [[ -f "${f}" ]] || return 0
  rclone copy "${f}" "${remote_dir}" --stats-one-line --stats 5s
}

copy_one "${LOCAL_DIR}/${BASE_NAME}" "${REMOTE_SUB}"
copy_one "${LOCAL_DIR}/${BASE_STEM}_raw.bin" "${REMOTE_SUB}"
# Always put LATEST pointer at remote root for "what was last".
copy_one "${GRABS}/LATEST.txt" "${REMOTE}/"
# Legacy counter if present.
if [[ -f "${GRABS}/T340.counter" ]]; then
  copy_one "${GRABS}/T340.counter" "${REMOTE}/"
fi

echo "p3_grab_sync: pushed ${LATEST} -> ${REMOTE_SUB}"
