#!/bin/sh
set -eu

BOOT_DEV="${SE_LOG_EXPORT_BOOT_DEV:-/dev/mmcblk0p1}"
MNT="${SE_LOG_EXPORT_MNT:-/mnt}"
OUT_DIR_REL="${SE_LOG_EXPORT_DIR:-}"
REASON="${1:-manual}"
TS="$(date +%Y%m%d-%H%M%S 2>/dev/null || echo unknown)"
OUT_BASE="${SE_LOG_EXPORT_BASENAME:-SE-LOGS}"
HOST="$(uname -n 2>/dev/null || echo seedetcher)"

need_cmd() {
  command -v "$1" >/dev/null 2>&1 || {
    echo "missing required command: $1" >&2
    exit 1
  }
}

need_cmd mkdir
need_cmd cp

if [ ! -b "$BOOT_DEV" ]; then
  echo "boot device not found: $BOOT_DEV" >&2
  exit 1
fi

mounted_here=0
mkdir -p "$MNT"
# Force /mnt to be the boot partition mount for deterministic behavior.
if awk -v m="$MNT" '$2==m{found=1} END{exit found?0:1}' /proc/mounts; then
  umount "$MNT" >/dev/null 2>&1 || true
fi
mount -t vfat "$BOOT_DEV" "$MNT"
mounted_here=1

cleanup() {
  if [ "$mounted_here" = "1" ]; then
    umount "$MNT" >/dev/null 2>&1 || true
  fi
}
trap cleanup EXIT INT TERM

if [ -n "$OUT_DIR_REL" ]; then
  OUT_DIR="$MNT/$OUT_DIR_REL"
else
  OUT_DIR="$MNT"
fi
mkdir -p "$OUT_DIR"

WORK="/tmp/log-export-${OUT_BASE}"
rm -rf "$WORK"
mkdir -p "$WORK"

mkdir -p "$WORK/log" "$WORK/var-log-cups"

# Privacy-first allowlist: avoid exporting broad debug/tmp/proc data.
cp /log/init_debug.log "$WORK/log/init_debug.log" 2>/dev/null || true
cp /log/cups.log "$WORK/log/cups.log" 2>/dev/null || true
cp /var/log/cups/error_log "$WORK/var-log-cups/error_log" 2>/dev/null || true
cp /var/log/cups/access_log "$WORK/var-log-cups/access_log" 2>/dev/null || true

if command -v dmesg >/dev/null 2>&1; then
  dmesg > "$WORK/dmesg.txt" 2>/dev/null || true
fi

case "$REASON" in
  boot*) ;;
  *)
    if [ -x /bin/pjl-snapshot ]; then
      /bin/pjl-snapshot "$WORK" >/dev/null 2>&1 || true
    fi
    ;;
esac

{
  echo "timestamp=${TS}"
  echo "reason=${REASON}"
  echo "host=${HOST}"
  echo "boot_dev=${BOOT_DEV}"
  echo "uname=$(uname -a 2>/dev/null || true)"
} > "$WORK/manifest.txt"

DEST_DIR="$OUT_DIR/${OUT_BASE}-LATEST"
rm -rf "$DEST_DIR"
mkdir -p "$DEST_DIR"
cp -r "$WORK"/. "$DEST_DIR"/

{
  echo "timestamp=${TS}"
} > "$DEST_DIR/export.timestamp"

rm -rf "$WORK"
sync
echo "exported logs: $DEST_DIR"
