#!/usr/bin/env bash

# Actualiza una copia de LEGAL-CMH desplegada con cPanel > Git Version Control.
# No copia archivos, no reemplaza .env, no modifica storage/ y no aplica
# migraciones. Esas operaciones requieren respaldo y autorización del entorno.
#
# Al final exige un Super Admin activo (admin:asegurar-superusuario): lo crea
# desde BOOTSTRAP_SUPER_ADMIN_* en .env solo si no existe ninguno y hace fallar el
# despliegue si no queda uno activo. Con migraciones pendientes solo avisa.
#
# Variables opcionales:
#   PHP_BIN       Ruta o nombre del ejecutable de PHP (por defecto: php).
#   COMPOSER_BIN  Ruta o nombre de Composer; si no se define, se busca composer
#                 en PATH o composer.phar en la raíz del proyecto.

set -euo pipefail

app_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$app_dir"

php_bin="${PHP_BIN:-php}"

if ! command -v "$php_bin" >/dev/null 2>&1; then
    echo "No se encontró PHP. Defina PHP_BIN con la ruta del ejecutable." >&2
    exit 1
fi

for required in artisan composer.json .env; do
    if [ ! -f "$required" ]; then
        echo "Falta $required en la raíz del proyecto." >&2
        exit 1
    fi
done

composer_cmd=()
if [ -n "${COMPOSER_BIN:-}" ]; then
    composer_cmd=("$COMPOSER_BIN")
elif command -v composer >/dev/null 2>&1; then
    composer_cmd=(composer)
elif [ -f composer.phar ]; then
    composer_cmd=("$php_bin" composer.phar)
else
    echo "No se encontró Composer. Instálelo o defina COMPOSER_BIN." >&2
    exit 1
fi

echo "Instalando dependencias de producción..."
"${composer_cmd[@]}" install \
    --no-dev \
    --no-interaction \
    --prefer-dist \
    --optimize-autoloader \
    --no-scripts

echo "Descubriendo paquetes y reconstruyendo cachés..."
"$php_bin" artisan optimize:clear
"$php_bin" artisan package:discover --ansi
"$php_bin" artisan config:cache
"$php_bin" artisan view:cache

# Los workers permanentes, si existen, deben reiniciarse para cargar el código nuevo.
"$php_bin" artisan queue:restart

# Debe ser el último paso: si falla, el despliegue termina con error (set -e) y no
# se anuncia como completado. No se usa --estricto: tras un despliegue con
# migraciones nuevas es normal que falten por aplicar.
echo "Verificando el Super Admin..."
"$php_bin" artisan admin:asegurar-superusuario

echo "Despliegue de código completado. Las migraciones se aplican por separado."
