#!/usr/bin/env bash
set -u

PAQUETE_DIR="$(cd "$(dirname "$0")" && pwd)"
PROYECTO_DIR="${1:-/home/iotcuboc/pyme}"
MARCA="$(date +%Y%m%d_%H%M%S)"
RESPALDO_DIR="${PROYECTO_DIR}/respaldos/revision_stock_venta_v4_3_${MARCA}"
MANIFEST="${PAQUETE_DIR}/MANIFEST.txt"

fallar(){ echo "ERROR: $1" >&2; exit 1; }
[ -d "$PROYECTO_DIR" ] || fallar "No existe el proyecto: $PROYECTO_DIR"
[ -f "$PROYECTO_DIR/public/venta_directa_v3.php" ] || fallar "Primero debe estar instalada Venta Directa v4.2.2"
[ -f "$MANIFEST" ] || fallar "Falta MANIFEST.txt"
command -v php >/dev/null 2>&1 || fallar "PHP CLI no está disponible"

while IFS= read -r archivo; do
  [ -n "$archivo" ] || continue
  [ -f "$PAQUETE_DIR/$archivo" ] || fallar "Falta en el paquete: $archivo"
  case "$archivo" in *.php) php -l "$PAQUETE_DIR/$archivo" >/dev/null || fallar "PHP inválido: $archivo";; esac
done < "$MANIFEST"

mkdir -p "$RESPALDO_DIR" || fallar "No se pudo crear el respaldo"
cp "$MANIFEST" "$RESPALDO_DIR/MANIFEST.txt" || fallar "No se pudo respaldar el manifiesto"

while IFS= read -r archivo; do
  [ -n "$archivo" ] || continue
  mkdir -p "$RESPALDO_DIR/$(dirname "$archivo")"
  if [ -f "$PROYECTO_DIR/$archivo" ]; then
    cp -p "$PROYECTO_DIR/$archivo" "$RESPALDO_DIR/$archivo" || fallar "No se pudo respaldar: $archivo"
  else
    : > "$RESPALDO_DIR/$archivo.pyme360_nuevo"
  fi
done < "$MANIFEST"

restaurar(){
  while IFS= read -r archivo; do
    [ -n "$archivo" ] || continue
    if [ -f "$RESPALDO_DIR/$archivo.pyme360_nuevo" ]; then
      rm -f "$PROYECTO_DIR/$archivo"
    elif [ -f "$RESPALDO_DIR/$archivo" ]; then
      mkdir -p "$PROYECTO_DIR/$(dirname "$archivo")"
      cp -p "$RESPALDO_DIR/$archivo" "$PROYECTO_DIR/$archivo"
    fi
  done < "$MANIFEST"
}

while IFS= read -r archivo; do
  [ -n "$archivo" ] || continue
  mkdir -p "$PROYECTO_DIR/$(dirname "$archivo")"
  cp -p "$PAQUETE_DIR/$archivo" "$PROYECTO_DIR/$archivo" || { restaurar; fallar "No se pudo instalar: $archivo"; }
done < "$MANIFEST"

while IFS= read -r archivo; do
  [ -n "$archivo" ] || continue
  case "$archivo" in *.php) php -l "$PROYECTO_DIR/$archivo" >/dev/null || { restaurar; fallar "Falló la validación final: $archivo"; };; esac
done < "$MANIFEST"

echo "Revisión de stock por venta instalada correctamente."
echo "Respaldo: $RESPALDO_DIR"
echo "Para revertir: bash '$PAQUETE_DIR/RESTAURAR.sh' '$RESPALDO_DIR' '$PROYECTO_DIR'"
