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

PROJECT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
DB_FILE="${PROJECT_DIR}/database/microerp.sqlite"
UPLOAD_DIR="${PROJECT_DIR}/uploads/productos"
ARCHIVE="${1:-}"
CONFIRM="${2:-}"

if [[ -z "${ARCHIVE}" || ! -f "${ARCHIVE}" ]]; then
  echo "Uso: $0 /ruta/backup.tar.gz [--yes]" >&2
  exit 1
fi

if [[ "${CONFIRM}" != "--yes" ]]; then
  read -r -p "Esto reemplazará la base y las fotos actuales. Escribí RESTAURAR: " ANSWER
  [[ "${ANSWER}" == "RESTAURAR" ]] || { echo "Cancelado."; exit 1; }
fi

TMP_DIR="$(mktemp -d)"
cleanup() {
  rm -rf -- "${TMP_DIR}"
}
trap cleanup EXIT

tar -tzf "${ARCHIVE}" | grep -qx "database/microerp.sqlite" || {
  echo "El archivo no contiene una base válida." >&2
  exit 1
}
tar -C "${TMP_DIR}" -xzf "${ARCHIVE}"
sqlite3 "${TMP_DIR}/database/microerp.sqlite" "PRAGMA integrity_check;" | grep -qx "ok" || {
  echo "La base incluida no supera la verificación de integridad." >&2
  exit 1
}

"${PROJECT_DIR}/scripts/backup.sh" >/dev/null
mkdir -p -- "${UPLOAD_DIR}"
sqlite3 "${DB_FILE}" ".restore '${TMP_DIR}/database/microerp.sqlite'"
find "${UPLOAD_DIR}" -mindepth 1 -maxdepth 1 -type f -delete
if [[ -d "${TMP_DIR}/uploads/productos" ]]; then
  cp -a -- "${TMP_DIR}/uploads/productos/." "${UPLOAD_DIR}/"
fi
chmod 660 "${DB_FILE}"
echo "Restauración completada. Se creó un backup de seguridad previo."

