#!/bin/bash
# Deploy refresh 20260920 : backup + lint + rsync --delete + migration 1.3.0 + 2 toggles + vérifs. PAS d'init.
set -e
DROOT="$HOME/pichinov/dolibarr/htdocs"; LIVE="$DROOT/custom/einvoicing"
RF="$HOME/pichinov/_refresh_einv2"; SCRIPTS="$HOME/pichinov/_stage_einv120_scripts"
TREE=$(grep '^TREE=' "$RF/_TREE" | cut -d= -f2-)
TS=$(date +%Y%m%d-%H%M%S); BK="$HOME/pichinov/backups/einvoicing-refresh-$TS"
echo "TS=$TS"; echo "TREE=$TREE"; echo "BK=$BK"
[ -f "$TREE/VERSION" ] || { echo "staging manquant"; exit 2; }
[ -d "$TREE/vendor" ] || { echo "vendor manquant dans staging"; exit 2; }
mkdir -p "$BK"

echo "=== BACKUP + snapshot consts AVANT ==="
cp -a "$LIVE" "$BK/einvoicing"; echo "backup: $(find "$BK/einvoicing" -type f | wc -l) fichiers"
php "$SCRIPTS/consts_snapshot.php" > "$BK/consts_before.txt" 2>/dev/null; echo "consts avant: $(wc -l < "$BK/consts_before.txt")"

echo "=== LINT staging (php8.1) ==="
NB=$(find "$TREE" -name '*.php' ! -path '*/vendor/*' | wc -l)
ERR=$(find "$TREE" -name '*.php' ! -path '*/vendor/*' | while read -r f; do php -l "$f" >/dev/null 2>&1 || echo "$f"; done)
[ -n "$ERR" ] && { echo "!!! LINT KO (abort avant swap):"; echo "$ERR"; exit 3; }
echo "lint OK sur $NB fichiers"
php -r "require '$TREE/vendor/autoload.php'; echo 'autoload OK'.PHP_EOL;" 2>&1 | tail -1

echo "=== SWAP rsync -a --delete (staging -> live) ==="
rsync -a --delete --exclude='.git' --chmod=D755,F644 "$TREE/" "$LIVE/"
echo "live VERSION = $(cat "$LIVE/VERSION")"

echo "=== MIGRATION 1.3.0 + 2 TOGGLES ==="
php "$SCRIPTS/migrate_v130.php"

echo "=== consts APRÈS + diff (attendu: +2 toggles, proxy inchangé) ==="
php "$SCRIPTS/consts_snapshot.php" > "$BK/consts_after.txt" 2>/dev/null
diff "$BK/consts_before.txt" "$BK/consts_after.txt" || true

echo "=== VÉRIFS refresh ==="
echo "  EmbeddedXmlReader: $([ -f "$LIVE/class/utils/EmbeddedXmlReader.class.php" ] && echo OK || echo MANQUE) | XmlPatcher absent: $([ ! -f "$LIVE/class/utils/XmlPatcher.class.php" ] && echo OK || echo 'PRÉSENT!')"
echo "  PriceHelper absent: $([ ! -f "$LIVE/class/utils/PriceHelper.class.php" ] && echo OK || echo 'PRÉSENT!') | ajax/document.php absent: $([ ! -f "$LIVE/ajax/document.php" ] && echo OK || echo 'PRÉSENT!')"
php "$SCRIPTS/verify120.php" 2>&1 | grep -viE "Deprecated|PHP Warning|Warning: Undefined|Notice"

echo "=== LINT live échantillon runtime ==="
for f in class/providers/SuperPDPProvider.class.php class/providers/AbstractPDPProvider.class.php public/proxy_oauthcallback.php class/utils/EmbeddedXmlReader.class.php core/modules/modEInvoicing.class.php sync_pending_list.php einvoice_tracking.php lib/einvoicing_lifecycle.lib.php; do
  if [ -f "$LIVE/$f" ]; then php -l "$LIVE/$f" >/dev/null 2>&1 && echo "  OK $f" || echo "  !!! KO $f"; else echo "  (absent) $f"; fi
done
echo "=== REFRESH2 TERMINÉ (TS=$TS) ==="
