#!/bin/bash
# Recon refresh 20260920 (LECTURE SEULE — n'écrit rien sur le live). Décide si le swap est sûr.
set -e
DROOT="$HOME/pichinov/dolibarr/htdocs"
LIVE="$DROOT/custom/einvoicing"
RF="$HOME/pichinov/_refresh_einv2"
ST="$RF/staging"

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

echo "=== vendor recopié du live dans staging (cible sans vendor) ==="
[ -d "$TREE/vendor" ] || cp -a "$LIVE/vendor" "$TREE/vendor"
echo "vendor staging: $(find "$TREE/vendor" -type f | wc -l)"

echo "=== DIFF PROXY SuperPDPProvider (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 ✅" || echo "^^^ ÉCARTS PROXY ⚠️ (à examiner)"

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

echo "=== CREDENTIALS — chiffrement #1013/#1016 : comment le nouveau code lit les SECRET ? ==="
grep -rnE "CLIENT_SECRET|dolDecrypt|dolEncrypt|dol_decode|dol_encode" "$TREE/class/providers/SuperPDPProvider.class.php" | head -40
echo "--- fichiers du paquet qui (dé)chiffrent ---"
grep -rlE "dolDecrypt|dolEncrypt" "$TREE/class" "$TREE/lib" 2>/dev/null | sed "s#$TREE/##" | head
echo "--- contexte decrypt autour des secrets (si présent) ---"
grep -rnE "dolDecrypt|Decrypt|decrypt" "$TREE/class/providers/SuperPDPProvider.class.php" | head -20

echo "=== 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.txt"
( cd "$TREE" && LC_ALL=C find . -type f | grep -v '/vendor/' | LC_ALL=C sort ) > "$RF/target.txt"
echo "--- LIVE-ONLY (SUPPRIMÉS par --delete) : ---"
LC_ALL=C comm -23 "$RF/live.txt" "$RF/target.txt"
echo "--- TARGET-ONLY (NOUVEAUX) : ---"
LC_ALL=C comm -13 "$RF/live.txt" "$RF/target.txt"

echo "=== ÉTAT ACTUEL DB (toggles / colonne / tab) ==="
php -r '
define("DOL_DOCUMENT_ROOT", "/homez.786/ridinteadu/pichinov/dolibarr/htdocs");
require_once DOL_DOCUMENT_ROOT."/master.inc.php";
global $db;
foreach (array("EINVOICING_ENABLE_MANUAL_ACTION_QUEUE","EINVOICING_ENABLE_POSTPONE_FLOWS") as $c) {
  $r=$db->query("SELECT value FROM ".MAIN_DB_PREFIX."const WHERE name=\"".$c."\"");
  echo "  ".$c." = ".($r && $db->num_rows($r) ? $db->fetch_object($r)->value : "(ABSENTE)")."\n";
}
$c=$db->query("SHOW COLUMNS FROM ".MAIN_DB_PREFIX."einvoicing_lifecycle_msg LIKE \"lc_recipient_roles\"");
echo "  colonne lc_recipient_roles: ".($c && $db->num_rows($c) ? "présente" : "ABSENTE")."\n";
$t=$db->query("SELECT COUNT(*) c FROM ".MAIN_DB_PREFIX."const WHERE name LIKE \"MAIN_MODULE_EINVOICING_TABS_%\"");
echo "  const TABS (onglet Suivi): ".$db->fetch_object($t)->c."\n";
foreach (array("EINVOICING_PDP","EINVOICING_SUPERPDP_VIAPARTNER") as $c) {
  $r=$db->query("SELECT value FROM ".MAIN_DB_PREFIX."const WHERE name=\"".$c."\"");
  echo "  ".$c." = ".($r && $db->num_rows($r) ? $db->fetch_object($r)->value : "(absente)")."\n";
}
' 2>&1 | grep -viE "Deprecated|PHP Warning|Warning: Undefined|Notice"
echo "=== RECON2 TERMINÉE ==="
