#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="${BACKUP_DIR:-/root/backups/tikah}"
RESTORE_DATABASE_URL="${RESTORE_DATABASE_URL:-}"
RESTORE_WORK_DIR="${RESTORE_WORK_DIR:-/tmp/tikah-restore-verify}"

mkdir -p "$RESTORE_WORK_DIR"

latest_uploads="$(find "$BACKUP_DIR" -maxdepth 1 -type f -name 'uploads-*.tar.gz' | sort | tail -n 1 || true)"
if [[ -n "$latest_uploads" ]]; then
  tar -tzf "$latest_uploads" >/dev/null
fi

latest_postgres="$(find "$BACKUP_DIR" -maxdepth 1 -type f -name 'tikah-postgres-*.sql.gz' | sort | tail -n 1 || true)"
latest_sqlite="$(find "$BACKUP_DIR" -maxdepth 1 -type f -name 'tikah-*.sqlite.gz' | sort | tail -n 1 || true)"

if [[ -n "$latest_postgres" ]]; then
  gzip -t "$latest_postgres"
  if [[ -n "$RESTORE_DATABASE_URL" ]]; then
    if ! command -v psql >/dev/null 2>&1; then
      echo "psql nao encontrado; nao foi possivel testar restore PostgreSQL." >&2
      exit 1
    fi
    gunzip -c "$latest_postgres" | psql "$RESTORE_DATABASE_URL" -v ON_ERROR_STOP=1 --single-transaction >/dev/null
  else
    echo "RESTORE_DATABASE_URL ausente; validado apenas integridade gzip do dump PostgreSQL."
  fi
elif [[ -n "$latest_sqlite" ]]; then
  gzip -t "$latest_sqlite"
  sqlite_restore="$RESTORE_WORK_DIR/restore-test.sqlite"
  rm -f "$sqlite_restore"
  gunzip -c "$latest_sqlite" > "$sqlite_restore"
  sqlite3 "$sqlite_restore" "PRAGMA integrity_check;" | grep -qx "ok"
else
  echo "Nenhum backup de banco encontrado em $BACKUP_DIR." >&2
  exit 1
fi

echo "Restore verification completed."
