#!/bin/bash
# Backup completo vtemessiniegori per migrazione su altro server.
# Produce: dump SQL + tarball file + manifest + istruzioni restore.
#
#   bash /var/www/html/server-ops/mypantarei/backup-vtemessiniegori-migration.sh
#   BACKUP_DIR=/path/custom bash ...   # directory destinazione (default: _backups)

set -euo pipefail

VTE=/var/www/html/vtemessiniegori
STAMP=$(date +%Y%m%d-%H%M%S)
DEST="${BACKUP_DIR:-/var/www/html/_backups}"
BUNDLE="vtemessiniegori-migration-${STAMP}"
WORKDIR="${DEST}/${BUNDLE}"

mkdir -p "$WORKDIR"

readarray -t DB_VARS < <(php8.3 -r "
chdir('${VTE}');
require 'config.inc.php';
echo (\$dbconfig['db_name'] ?? '') . PHP_EOL;
echo (\$dbconfig['db_username'] ?? '') . PHP_EOL;
echo (\$dbconfig['db_password'] ?? '') . PHP_EOL;
echo (\$dbconfig['db_server'] ?? 'localhost') . PHP_EOL;
echo (\$site_URL ?? '') . PHP_EOL;
echo (\$root_directory ?? '') . PHP_EOL;
echo (\$application_unique_key ?? '') . PHP_EOL;
")

DB_NAME="${DB_VARS[0]}"
DB_USER="${DB_VARS[1]}"
DB_PASS="${DB_VARS[2]}"
DB_HOST="${DB_VARS[3]}"
SITE_URL="${DB_VARS[4]}"
ROOT_DIR="${DB_VARS[5]}"
APP_KEY="${DB_VARS[6]}"

SQL="${WORKDIR}/database.sql"
FILES="${WORKDIR}/files.tar.gz"
MANIFEST="${WORKDIR}/MANIFEST.txt"
RESTORE="${WORKDIR}/RESTORE.md"

echo "=== Backup migrazione vtemessiniegori ==="
echo "Destinazione: ${WORKDIR}"
echo ""

echo "[1/4] Dump database ${DB_NAME}@${DB_HOST} ..."
MYSQL_PWD="$DB_PASS" mysqldump \
	-h "$DB_HOST" \
	-u "$DB_USER" \
	--single-transaction \
	--routines \
	--triggers \
	--events \
	--hex-blob \
	--default-character-set=utf8mb4 \
	"$DB_NAME" > "$SQL"

gzip -9 "$SQL"
SQL="${SQL}.gz"
echo "      -> $(basename "$SQL") ($(du -h "$SQL" | cut -f1))"

echo "[2/4] Tarball file istanza ..."
# Esclusi solo artefatti rigenerabili / log voluminosi. --exclude prima dei path.
tar czf "$FILES" \
	--exclude='vtemessiniegori/cache/images' \
	--exclude='vtemessiniegori/cache/import' \
	--exclude='vtemessiniegori/cache/xml' \
	--exclude='vtemessiniegori/cache/upload/tmp' \
	--exclude='vtemessiniegori/cache/templates_c' \
	--exclude='vtemessiniegori/cache_local/smarty' \
	--exclude='vtemessiniegori/logs' \
	--exclude='vtemessiniegori/vte_updater/3001' \
	--exclude='vtemessiniegori/.git' \
	-C /var/www/html vtemessiniegori

echo "      -> $(basename "$FILES") ($(du -h "$FILES" | cut -f1))"

echo "[3/4] Manifest ..."
{
	echo "vtemessiniegori — backup migrazione"
	echo "Creato: $(date -Iseconds)"
	echo "Hostname sorgente: $(hostname -f 2>/dev/null || hostname)"
	echo ""
	echo "Database:"
	echo "  name: ${DB_NAME}"
	echo "  user: ${DB_USER}"
	echo "  host: ${DB_HOST}"
	echo ""
	echo "Istanza VTE:"
	echo "  root_directory: ${ROOT_DIR}"
	echo "  site_URL: ${SITE_URL}"
	echo "  application_unique_key: ${APP_KEY}"
	echo ""
	echo "Contenuto bundle:"
	echo "  database.sql.gz  — dump MySQL completo (routines, triggers, events)"
	echo "  files.tar.gz     — codice, config, vendor, user_privileges, storage, cache/upload"
	echo ""
	echo "Esclusi dal tarball (rigenerabili):"
	echo "  cache/images, cache/import, cache/xml, cache/upload/tmp, templates_c compilati"
	echo "  cache_local/smarty, logs/, vte_updater/3001"
	echo ""
	echo "Dimensioni:"
	du -h "$SQL" "$FILES" | sed 's/^/  /'
} > "$MANIFEST"

cat > "$RESTORE" <<'RESTORE_EOF'
# Restore vtemessiniegori su nuovo server

## Prerequisiti target

- VTE 26.04+ su PHP 8.3 (Apache/Nginx + PHP-FPM)
- MySQL/MariaDB 8.x
- Estensioni PHP: mysqli, gd, intl, zip, xml, mbstring, curl, ldap (se usato)

## 1. Database

```bash
mysql -u root -p -e "CREATE DATABASE vtemessiniegori CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p -e "CREATE USER 'vtemessiniegori'@'localhost' IDENTIFIED BY 'NUOVA_PASSWORD';"
mysql -u root -p -e "GRANT ALL ON vtemessiniegori.* TO 'vtemessiniegori'@'localhost'; FLUSH PRIVILEGES;"

gunzip -c database.sql.gz | mysql -u vtemessiniegori -p vtemessiniegori
```

## 2. File

```bash
cd /var/www/html
tar xzf files.tar.gz
chown -R www-data:www-data vtemessiniegori
mkdir -p vtemessiniegori/logs/cron vtemessiniegori/cache/images vtemessiniegori/cache/import
chmod 755 vtemessiniegori/logs vtemessiniegori/cache
```

## 3. Configurazione

Modificare `vtemessiniegori/config.inc.php`:

- `$dbconfig['db_password']` → password DB target
- `$site_URL` → URL pubblico nuovo server (es. `https://vte.cliente.it`)
- `$root_directory` → path assoluto su nuovo server

## 4. Virtual host Apache

Copiare/adattare da `vte2472/scripts/apache_vtemessiniegori.conf` e `apache_vtemessiniegori-le-ssl.conf`.
DocumentRoot: `/var/www/html/vtemessiniegori`

## 5. Cron VTE

```bash
# Esempio /etc/cron.d/vtemessiniegori
*/5 * * * * www-data cd /var/www/html/vtemessiniegori && php8.3 -f cron/vtigercron.php >> logs/cron/cron.log 2>&1
```

## 6. Post-restore

```bash
cd /var/www/html/vtemessiniegori
php8.3 -r "if (function_exists('apcu_clear_cache')) apcu_clear_cache();"
rm -rf cache/smarty/* cache_local/smarty/* 2>/dev/null || true
php Appoggio/scripts/verify_gestione_ore.php
```

## 7. Modulo Gestione Ore

Se serve solo il custom (già incluso nei file):

```bash
php packages/GestioneOre/install.php      # idempotente se già in DB
php Appoggio/scripts/register_presenze_sdk.php
```

Guida deploy: `Appoggio/PORTING-GESTIONE-ORE-NUOVA-ISTANZA.md`

## Verifica

- Login admin
- `index.php?module=Presenze&action=ImmissioneHub`
- Conteggi anagrafiche (Operai, Cantieri, Presenze)
RESTORE_EOF

# Inietta valori reali nel restore
sed -i "s|NUOVA_PASSWORD|*** impostare password sicura ***|g" "$RESTORE"

echo "[4/4] Bundle finale ..."
cd "$DEST"
FINAL="${BUNDLE}.tar.gz"
tar czf "$FINAL" "$BUNDLE"
rm -rf "$WORKDIR"

echo ""
echo "=== Backup completato ==="
ls -lh "$DEST/${FINAL}"
echo ""
echo "Per trasferire su altro server:"
echo "  scp ${DEST}/${FINAL} user@nuovo-server:/tmp/"
echo "  ssh user@nuovo-server 'cd /tmp && tar xzf ${FINAL} && cat ${BUNDLE}/RESTORE.md'"
