#!/bin/bash
# Recon refresh einvoicing : backup + snapshot consts + extract cible + diff proxy + diff file-list.
# NE MODIFIE PAS le live (que backup en copie). Décide la méthode d'application.
set -e
DROOT="$HOME/pichinov/dolibarr/htdocs"
LIVE="$DROOT/custom/einvoicing"
RF="$HOME/pichinov/_refresh_einv"
ST="$RF/staging"
SCRIPTS="$HOME/pichinov/_stage_einv120_scripts"
TS=$(date +%Y%m%d-%H%M%S)
BK="$HOME/pichinov/backups/einvoicing-refresh-$TS"

echo "TS=$TS"; echo "BK=$BK"
mkdir -p "$BK"

echo "=== 1) BACKUP live (cp -a) ==="
cp -a "$LIVE" "$BK/einvoicing"
echo "backup: $(find "$BK/einvoicing" -type f | wc -l) fichiers"

echo "=== 2) snapshot consts AVANT ==="
php "$SCRIPTS/consts_snapshot.php" > "$BK/consts_before.txt" 2>/dev/null
echo "consts AVANT: $(wc -l < "$BK/consts_before.txt")"

echo "=== 3) extract cible -> staging ==="
rm -rf "$ST"; mkdir -p "$ST"
tar -xzf "$RF/einvoicing_target_1.2.0_refresh.tgz" -C "$ST"
if [ -f "$ST/VERSION" ]; then TREE="$ST"; elif [ -f "$ST/einvoicing/VERSION" ]; then TREE="$ST/einvoicing"; else echo "ARBRE INTROUVABLE"; ls -R "$ST" | head -20; exit 2; fi
echo "TREE=$TREE  VERSION=$(cat "$TREE/VERSION")  fichiers=$(find "$TREE" -type f | wc -l)"

echo "=== 4) vendor : cible sans vendor -> recopie du live ==="
if [ ! -d "$TREE/vendor" ]; then cp -a "$LIVE/vendor" "$TREE/vendor"; echo "vendor recopié: $(find "$TREE/vendor" -type f | wc -l) fichiers"; else echo "vendor déjà présent dans la cible ($(find "$TREE/vendor" -type f | wc -l))"; fi

echo "=== 5) DIFF PROXY — SuperPDPProvider (lignes proxy/preg_replace) live vs cible ==="
diff <(grep -nE "proxy|VIAPARTNER|SUPERPDPViaPartner|preg_replace" "$LIVE/class/providers/SuperPDPProvider.class.php" | sed 's/^[0-9]*://') \
     <(grep -nE "proxy|VIAPARTNER|SUPERPDPViaPartner|preg_replace" "$TREE/class/providers/SuperPDPProvider.class.php" | sed 's/^[0-9]*://') \
  && echo "PROXY LINES IDENTIQUES (aucun code proxy perdu) ✅" || echo "^^^ ÉCARTS PROXY à examiner ⚠️"

echo "=== 6) DIFF proxy_oauthcallback.php live vs cible ==="
if diff "$LIVE/public/proxy_oauthcallback.php" "$TREE/public/proxy_oauthcallback.php" >/dev/null; then echo "proxy_oauthcallback IDENTIQUE ✅"; else echo "proxy_oauthcallback DIFFÈRE :"; diff "$LIVE/public/proxy_oauthcallback.php" "$TREE/public/proxy_oauthcallback.php" | head -40; fi

echo "=== 7) queue + #710 + menu descripteur présents dans la cible ? ==="
echo "  queue (queueFromFlow/TotalQueuedForManualAction): $(grep -cE "queueFromFlow|TotalQueuedForManualAction" "$TREE/class/providers/SuperPDPProvider.class.php")"
echo "  menu descripteur PDPSYNCPENDING/sync_pending_list: $(grep -cE "sync_pending_list.php|PDPSYNCPENDING" "$TREE/core/modules/modEInvoicing.class.php")"
echo "  #710 STATUS_REJECTED (actions_einvoicing): $(grep -c "STATUS_REJECTED" "$TREE/class/actions_einvoicing.class.php" 2>/dev/null || echo '0/absent')"
echo "  onglet Suivi (einvoice_tracking.php): $([ -f "$TREE/einvoice_tracking.php" ] && echo présent || echo ABSENT)"

echo "=== 8) FILE-LIST diff live vs cible (hors vendor, LC_ALL=C) ==="
( cd "$LIVE" && LC_ALL=C find . -type f | grep -v '/vendor/' | LC_ALL=C sort ) > "$RF/live_files.txt"
( cd "$TREE" && LC_ALL=C find . -type f | grep -v '/vendor/' | LC_ALL=C sort ) > "$RF/target_files.txt"
echo "--- LIVE-ONLY (seraient supprimés par rsync --delete) : ---"
LC_ALL=C comm -23 "$RF/live_files.txt" "$RF/target_files.txt"
echo "--- TARGET-ONLY (nouveaux fichiers) : ---"
LC_ALL=C comm -13 "$RF/live_files.txt" "$RF/target_files.txt"

echo "TS=$TS" > "$RF/_TS"
echo "TREE=$TREE" >> "$RF/_TS"
echo "=== RECON TERMINÉE (TS=$TS) ==="
