#!/bin/bash
# Upgrade VTE 25.02.2 (3001) → 26.04 (3367) con composer install dopo copia file.
# vteUpdater.sh copia il pacchetto ma NON esegue composer: vendor ibrido → fatal su vteSelfUpdate.
#
# Prerequisiti:
#   - Pacchetti in vte_updater/packages/vte3001-3367*.tgz (o files3367 già estratto)
#   - PHP 8.3 CLI + Apache già su 8.3 per l'istanza
#   - Esecuzione come root
#
# Uso:
#   sudo bash /var/www/html/server-ops/mypantarei/vte2604-upgrade-with-composer.sh /var/www/html/vteguzzini

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

if [[ "${EUID:-0}" -ne 0 ]]; then
	echo "Esegui come root: sudo bash $0 [/var/www/html/vteguzzini]" >&2
	exit 1
fi

VTE="${1:-/var/www/html/vteguzzini}"
VTE="${VTE%/}"
FROM_REV=3001
TO_REV=3367
PKG="$VTE/vte_updater/${FROM_REV}/files${TO_REV}"

if [[ ! -d "$PKG" ]]; then
	echo "[ERRORE] Manca $PKG — esegui prima vteUpdater fino all'estrazione o copia i .tgz in vte_updater/packages/" >&2
	exit 1
fi

if [[ ! -f "$VTE/composer.phar" ]]; then
	echo "[ERRORE] Manca $VTE/composer.phar" >&2
	exit 1
fi

PHP="${PHP:-/usr/bin/php8.3}"
if [[ ! -x "$PHP" ]]; then
	echo "[ERRORE] PHP 8.3 non trovato: $PHP" >&2
	exit 1
fi

echo "=== VTE 26.04 upgrade (con composer) ==="
echo "Istanza: $VTE"
echo "Pacchetto: $PKG"

# --- maintenance (come vteUpdater) ---
if [[ -f "$VTE/maintenance.php" ]] && grep -q '^\$vte_maintenance' "$VTE/maintenance.php"; then
	sed -i 's/^\$vte_maintenance.*$/$vte_maintenance = true;/i' "$VTE/maintenance.php"
	echo "[INFO] Maintenance mode ON"
fi

cd "$VTE"

# vteversion_old per vteSelfUpdate (build corrente prima del salto)
CUR_BUILD=$(php -r "include 'vteversion.php'; echo \$enterprise_current_build;")
if [[ "$CUR_BUILD" != "$FROM_REV" ]]; then
	echo "[WARN] Build attuale $CUR_BUILD (atteso $FROM_REV). Continuo comunque."
fi

cat > "$VTE/vteversion_old.php" <<EOF
<?php
\$vteversion_preupdate = '$FROM_REV';
\$is_partial_update = 0;
\$partial_start = 0;
EOF
chown www-data:www-data "$VTE/vteversion_old.php"

echo "[1/5] Copia file pacchetto 3367 (escluso vendor/)..."
# rsync evita vendor incompleto del pacchetto (~51M vs ~196M post-composer)
# cp come vteUpdater (no --delete: non rimuovere moduli/custom non nel pacchetto)
cp -rf "$PKG"/* "$VTE/"
if compgen -G "$PKG/.[^.]*" > /dev/null; then
	cp -rf "$PKG"/.[!.]* "$VTE/" 2>/dev/null || true
fi
chown -R www-data:www-data "$VTE"
if [[ -d "$PKG/vendor" ]]; then
	echo "      (vendor del pacchetto ignorato — rigenerato con composer)"
fi

echo "[2/5] composer install (PHP 8.3)..."
rm -rf "$VTE/vendor"
export COMPOSER_ALLOW_SUPERUSER=1
cd "$VTE"
sudo -u www-data env COMPOSER_ALLOW_SUPERUSER=1 "$PHP" composer.phar install --no-dev --no-interaction

NEW_BUILD=$(php -r "include 'vteversion.php'; echo \$enterprise_current_build;")
if [[ "$NEW_BUILD" != "$TO_REV" ]]; then
	echo "[ERRORE] Dopo copia, build=$NEW_BUILD (atteso $TO_REV). Controlla vteversion.php" >&2
	exit 1
fi
echo "      vteversion build=$NEW_BUILD OK"

# vteSelfUpdate.php è generato da vteUpdater e poi rimosso; usa copia da vte_dev se assente
if [[ ! -f "$VTE/vteSelfUpdate.php" ]]; then
	if [[ -f /var/www/html/vte_dev/vteSelfUpdate.php ]]; then
		cp /var/www/html/vte_dev/vteSelfUpdate.php "$VTE/vteSelfUpdate.php"
		chown www-data:www-data "$VTE/vteSelfUpdate.php"
	else
		echo "[ERRORE] Manca $VTE/vteSelfUpdate.php (esegui una volta vteUpdater fino a 'Files copied' o copialo da vte_dev)" >&2
		exit 1
	fi
fi

echo "[3/5] Schema update (vteSelfUpdate.php)..."
LOG="$VTE/vte_updater/${FROM_REV}/$(date +%Y%m%d-%H%M%S)_manual_vteupdate.log"
sudo -u www-data "$PHP" -f "$VTE/vteSelfUpdate.php" "$FROM_REV" "$TO_REV" > "$LOG" 2>&1 || {
	echo "[ERRORE] vteSelfUpdate fallito. Log: $LOG" >&2
	tail -30 "$LOG" >&2
	exit 1
}
if ! grep -q '^UPDATE FINISHED$' "$LOG"; then
	echo "[ERRORE] UPDATE FINISHED non trovato in $LOG" >&2
	tail -40 "$LOG" >&2
	exit 1
fi
echo "      Schema OK — log: $LOG"

if [[ -f "$VTE/vteSelfUpdatePost.php" ]]; then
	echo "[4/5] vteSelfUpdatePost.php..."
	sudo -u www-data "$PHP" -f "$VTE/vteSelfUpdatePost.php" >> "$LOG" 2>&1 || true
else
	echo "[4/5] vteSelfUpdatePost.php assente, skip"
fi

rm -f "$VTE/vteversion_old.php" "$VTE/vteSelfUpdate.php" 2>/dev/null || true

chown -R www-data:www-data "$VTE/vendor" "$VTE/config" "$VTE/custom_sdk" 2>/dev/null || true

if [[ -f "$VTE/maintenance.php" ]]; then
	sed -i 's/^\$vte_maintenance.*$/$vte_maintenance = false;/i' "$VTE/maintenance.php"
	echo "[INFO] Maintenance mode OFF"
fi

echo "[5/5] Patch post-26 (AuthControllerNoVTCH, Morphsuit, cache SDK)..."
PATCH="${SCRIPT_DIR:-/var/www/html/server-ops/mypantarei}/install-vte-post2604-patches.php"
if [[ -f "$PATCH" ]]; then
	"$PHP" "$PATCH" "$VTE"
elif [[ -f /var/www/html/server-ops/mypantarei/install-vteguzzini-post2604-patches.php ]]; then
	"$PHP" /var/www/html/server-ops/mypantarei/install-vteguzzini-post2604-patches.php
fi
if [[ -f "${SCRIPT_DIR:-/var/www/html/server-ops/mypantarei}/vte-clear-sdk-class-cache-cli.php" ]]; then
	"$PHP" "${SCRIPT_DIR:-/var/www/html/server-ops/mypantarei}/vte-clear-sdk-class-cache-cli.php" "$VTE"
fi

VER=$(php -r "include '$VTE/vteversion.php'; echo \$enterprise_current_version.'/'.\$enterprise_current_build;")
echo ""
echo "[OK] Upgrade completato: $VER"
echo "Verifica login e: module=Update&action=ViewUpdate"
