#!/bin/bash
# Backup MySQL con retention + cron VTE come www-data (rimuove duplicati root/pantarei).
#
#   sudo bash /var/www/html/server-ops/mypantarei/apply-server-backup-and-vte-cron.sh
#
# Opzioni ambiente:
#   DISABLE_AUTOMYSQLBACKUP=1   — non tocca automysqlbackup (solo cron VTE)
#   KEEP_DAILY=14 KEEP_WEEKLY=60 KEEP_MONTHLY=365

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CLEANUP_SRC="${SCRIPT_DIR}/automysqlbackup-cleanup.sh"
CLEANUP_DEST="/usr/local/sbin/automysqlbackup-cleanup.sh"
BACKUP_DIR="/var/backups/mysql"
AMI_DEFAULT="/etc/default/automysqlbackup"
CRON_D2472="/etc/cron.d/vte2472"
CRON_DGUZZINI="/etc/cron.d/vteguzzini"
CRON_DMESSINIEGORI="/etc/cron.d/vtemessiniegori"
PHP74="/usr/bin/php7.4"
PHP83="/usr/bin/php8.3"
WRAPPER83="${SCRIPT_DIR}/vte-RunCron-php83.sh"

if [[ "$(id -u)" -ne 0 ]]; then
	echo "Eseguire come root: sudo bash $0" >&2
	exit 1
fi

echo "=== 1) automysqlbackup: ${BACKUP_DIR} + retention ==="
if [[ "${DISABLE_AUTOMYSQLBACKUP:-0}" != "1" ]]; then
	install -m 755 "$CLEANUP_SRC" "$CLEANUP_DEST"
	mkdir -p "$BACKUP_DIR"
	chmod 750 "$BACKUP_DIR"

	if [[ -f "$AMI_DEFAULT" ]]; then
		if grep -q '^BACKUPDIR=' "$AMI_DEFAULT"; then
			sed -i 's|^BACKUPDIR=.*|BACKUPDIR="'"$BACKUP_DIR"'"|' "$AMI_DEFAULT"
		else
			echo "BACKUPDIR=\"$BACKUP_DIR\"" >>"$AMI_DEFAULT"
		fi
		if grep -q '^POSTBACKUP=' "$AMI_DEFAULT"; then
			sed -i 's|^POSTBACKUP=.*|POSTBACKUP="'"$CLEANUP_DEST"'"|' "$AMI_DEFAULT"
		else
			echo "POSTBACKUP=\"$CLEANUP_DEST\"" >>"$AMI_DEFAULT"
		fi
		chmod +x /etc/cron.daily/automysqlbackup 2>/dev/null || true
		echo "  BACKUPDIR=$BACKUP_DIR POSTBACKUP=$CLEANUP_DEST"
	else
		echo "  ATTENZIONE: $AMI_DEFAULT non trovato, salto automysqlbackup." >&2
	fi

	# /backup legacy: non più usato da automysqlbackup (opzionale svuotare a mano)
	if [[ -d /backup ]] && [[ "$(stat -c '%a' /backup 2>/dev/null)" != "" ]]; then
		echo "  Nota: /backup esiste ancora; automysqlbackup ora scrive in $BACKUP_DIR"
	fi
else
	echo "  DISABLE_AUTOMYSQLBACKUP=1 — saltato."
fi

echo ""
echo "=== 2) Cron VTE come www-data (/etc/cron.d) ==="

install_vte_cron() {
	local target="$1" vte_root="$2" php_line="$3"
	cat >"$target" <<EOF
# VTENEXT $(basename "$vte_root") — generato da apply-server-backup-and-vte-cron.sh
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* * * * * www-data ${php_line} >> ${vte_root}/logs/cron.log 2>&1
EOF
	chmod 644 "$target"
	local log_dir="${vte_root}/logs/cron"
	mkdir -p "$log_dir"
	touch "${vte_root}/logs/cron.log" "${log_dir}/cron_MailScanner_01.log" 2>/dev/null || true
	chown -R www-data:www-data "$log_dir" "${vte_root}/logs/cron.log" 2>/dev/null || true
	echo "  $target → www-data"
}

# vte2472: PHP 7.4 (istanza legacy)
install_vte_cron "$CRON_D2472" "/var/www/html/vte2472" \
	"USE_PHP=${PHP74} /var/www/html/vte2472/cron/RunCron.sh"

# vteguzzini: PHP 8.3 (VTE 26)
if [[ -x "$WRAPPER83" ]]; then
	install_vte_cron "$CRON_DGUZZINI" "/var/www/html/vteguzzini" \
		"$WRAPPER83 /var/www/html/vteguzzini"
else
	install_vte_cron "$CRON_DGUZZINI" "/var/www/html/vteguzzini" \
		"USE_PHP=${PHP83} /var/www/html/vteguzzini/cron/RunCron.sh"
fi

# vtemessiniegori: PHP 7.4 (VTE 25.02.2 demo)
if [[ -d /var/www/html/vtemessiniegori ]]; then
	if [[ -x "$SCRIPT_DIR/vte-RunCron-php74.sh" ]]; then
		install_vte_cron "$CRON_DMESSINIEGORI" "/var/www/html/vtemessiniegori" \
			"${SCRIPT_DIR}/vte-RunCron-php74.sh /var/www/html/vtemessiniegori"
	else
		install_vte_cron "$CRON_DMESSINIEGORI" "/var/www/html/vtemessiniegori" \
			"USE_PHP=${PHP74} /var/www/html/vtemessiniegori/cron/RunCron.sh"
	fi
else
	echo "  vtemessiniegori: cartella assente, salto cron."
fi

echo ""
echo "=== 3) Rimuovo duplicati da crontab pantarei ==="
if crontab -u pantarei -l >/dev/null 2>&1; then
	NEW_CRON="$(crontab -u pantarei -l | grep -vE \
		'vte2472/cron/RunCron|vteguzzini/cron/RunCron|vtenext20ce/cron/RunCron' || true)"
	printf '%s\n' "$NEW_CRON" | crontab -u pantarei -
	echo "  Rimossi RunCron VTE da crontab pantarei (restano obolo e altri job)."
else
	echo "  Nessun crontab pantarei."
fi

echo ""
echo "=== 4) Verifica crontab www-data (non deve duplicare VTE se usi solo cron.d) ==="
if crontab -u www-data -l >/dev/null 2>&1; then
	if crontab -u www-data -l | grep -qE 'RunCron\.sh|vte-RunCron'; then
		echo "  ATTENZIONE: crontab www-data contiene ancora RunCron — controlla duplicati:" >&2
		crontab -u www-data -l | grep -E 'RunCron|vte' || true
	else
		echo "  crontab www-data OK (nessun RunCron duplicato)."
	fi
else
	echo "  crontab www-data vuoto (OK con /etc/cron.d)."
fi

echo ""
echo "=== 5) Riepilogo cron VTE attivi ==="
grep -hE 'RunCron|vte-RunCron' /etc/cron.d/vte* 2>/dev/null || true

echo ""
echo "Fatto."
echo "  Backup MySQL: $BACKUP_DIR (retention via $CLEANUP_DEST)"
echo "  Cron VTE: utente www-data in $CRON_D2472, $CRON_DGUZZINI e (se presente) $CRON_DMESSINIEGORI"
echo "  Trial destroy (root 23:59): invariato in crontab root"
echo ""
echo "Verifica dopo 1-2 minuti:"
echo "  tail -f /var/www/html/vte2472/logs/cron/cron_MailScanner_01.log"
echo "  tail -f /var/www/html/vteguzzini/logs/cron/cron_MailScanner_01.log"
