#!/usr/bin/env bash
# Uso: sudo ./deploy.sh
# Actualiza el codigo, reconstruye contenedores, migra y limpia cache.
set -euo pipefail

cd "$(dirname "$(readlink -f "$0")")"

if [ "$(id -u)" -ne 0 ]; then
  echo "Ejecutar con sudo: sudo ./deploy.sh" >&2
  exit 1
fi

echo "==> git pull"
git pull

echo "==> Reconstruyendo contenedores"
docker compose up -d --build --force-recreate app web tenant-worker

echo "==> Migraciones (base central mbinvcxp)"
docker compose exec -T app php bin/console doctrine:migrations:migrate --no-interaction

# Las bases database_per_client no reciben las migraciones de Doctrine:
# repair-all aplica el drift aditivo de schema y catalogos en cada tenant.
# Un tenant con error no detiene a los demas; se revisa el resumen final.
echo "==> Migracion multitenant (repair-all --execute)"
docker compose exec -T -e ALLOW_TENANT_DATA_MIGRATION=1 app php bin/console app:tenant:repair-all --execute

# El repo esta montado sobre /var/www/html y public/build esta en .gitignore:
# el build hecho al construir la imagen queda tapado, hay que compilar en el volumen.
echo "==> Compilando assets (CSS/JS)"
docker compose exec -T -u root app sh -lc '
set -e
npm ci --ignore-scripts || npm install --ignore-scripts
npm run build
'

echo "==> Permisos de cache, logs y uploads"
docker compose exec -T -u root app sh -lc '
set -e
rm -rf var/cache/*
mkdir -p var/cache/prod/doctrine/orm/Proxies var/log public/uploads/adjuntos
chown -R www-data:www-data var/cache var/log public/uploads
chmod -R ug+rwX var/cache var/log public/uploads
su -s /bin/sh www-data -c "test -w var/cache/prod/doctrine/orm/Proxies && echo Proxies writable by www-data"
'

echo "==> Cache prod"
docker compose exec -T -u www-data app php bin/console cache:clear --env=prod --no-debug
docker compose exec -T -u www-data app php bin/console cache:warmup --env=prod --no-debug

echo "==> Reiniciando servicios"
docker compose restart app web tenant-worker

echo "==> Logs recientes de app"
docker compose logs --since=3m app

echo "Deploy terminado."
