#!/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/configuracion_formatos_${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/config/db.php" ] || fallar "No se encontró config/db.php"
[ -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"

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"

php "$PAQUETE_DIR/paso/migrar_config_empresa_v3.php" "$RESPALDO_DIR" "$PROYECTO_DIR" || fallar "Falló la migración de configuración"

restaurar(){
  echo "Restaurando archivos y configuración anteriores..." >&2
  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"
  php "$PAQUETE_DIR/paso/restaurar_config_empresa_v3.php" "$RESPALDO_DIR/config_empresas.json" "$PROYECTO_DIR" || true
}

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 "Instalación completada correctamente."
echo "Respaldo: $RESPALDO_DIR"
echo "Configura cada empresa en: public/configuracion_empresa_v3.php"
echo "Para revertir: bash $PAQUETE_DIR/RESTAURAR.sh '$RESPALDO_DIR' '$PROYECTO_DIR'"
