#!/bin/bash
# ==========================================================
# Compare les data-website-id entre Nginx Proxy Manager (NPM)
# et Umami (PostgreSQL)
# !!!   UMAMI and NPM need to be in DOCKER  !!!!!
# ==========================================================

NPM_PATH="/home/docker/nginx_proxy/data/nginx/proxy_host/"
OUT_DIR="$(pwd)"
INVALID_FILE="$OUT_DIR/npm_invalid.txt"

# --- Vérification des fichiers NPM ---
echo "[+] Vérification des fichiers NPM..."
> "$INVALID_FILE"
for f in "$NPM_PATH"/*.conf; do
  id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$f" | sed -E 's/.*="([a-f0-9-]+)".*/\1/')
  name=$(grep -m2 '^# ' "$f" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //')
  num=$(basename "$f")
  if [[ -n "$id" && -z "$name" ]]; then
    echo "$id | (vide) | $num" >> "$INVALID_FILE"
  fi
done

# --- Extraction NPM (valide uniquement) ---
echo "[+] Extraction des sites NPM..."
> "$OUT_DIR/npm_sites.txt"

for file in "$NPM_PATH"/*.conf; do
    site=$(grep -m2 '^# ' "$file" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //')
    id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$file" | sed -E 's/.*="([a-f0-9-]+)".*/\1/')
    conf=$(basename "$file")
    if [[ -n "$id" && -n "$site" && "$site" != "------------------------------------------------------------" ]]; then
        echo "$id | $site | $conf" >> "$OUT_DIR/npm_sites.txt"
    fi
done

sort -u "$OUT_DIR/npm_sites.txt" -o "$OUT_DIR/npm_sites.txt"

# --- Nettoyage avant fusion ---
grep -E '[0-9a-f-]{8}-' "$OUT_DIR/npm_sites.txt" | grep '|' > "$OUT_DIR/npm_sites.tmp" && mv "$OUT_DIR/npm_sites.tmp" "$OUT_DIR/npm_sites.txt"

# --- Extraction Umami ---
echo "[+] Extraction des sites Umami (PostgreSQL)..."
docker exec -t umami-db psql -U umami -d umami -P pager=off \
    -c "SELECT website_id, name FROM website;" > "$OUT_DIR/umami_sites_raw.txt"

grep -oE '[0-9a-f-]{36} *\| *[A-Za-z0-9._-]+' "$OUT_DIR/umami_sites_raw.txt" \
  | sed 's/ *| */ | /' | sort -u > "$OUT_DIR/umami_sites.txt"

# Nettoyage des lignes Umami vides ou invalides
grep -E '[0-9a-f-]{8}-' "$OUT_DIR/umami_sites.txt" | grep '|' > "$OUT_DIR/umami_sites.tmp" && mv "$OUT_DIR/umami_sites.tmp" "$OUT_DIR/umami_sites.txt"

# --- Fusion ---
echo "[+] Fusion des deux listes..."
echo "UUID | NPM_SITE | CONF_FILE | UMAMI_SITE" > "$OUT_DIR/merged_sites.txt"
echo "----------------------------------------------------------------" >> "$OUT_DIR/merged_sites.txt"

join -t'|' -a1 -a2 -e" " -o '0,1.2,1.3,2.2' \
    <(sort -t'|' -k1,1 "$OUT_DIR/npm_sites.txt") \
    <(sort -t'|' -k1,1 "$OUT_DIR/umami_sites.txt") \
    >> "$OUT_DIR/merged_sites.txt"

# --- Résumé ---
echo
echo "=== Résumé ==="
echo "→ NPM valides :   $OUT_DIR/npm_sites.txt"
echo "→ NPM invalides : $OUT_DIR/npm_invalid.txt"
echo "→ Umami :         $OUT_DIR/umami_sites.txt"
echo "→ Fusion :        $OUT_DIR/merged_sites.txt"
echo
echo "✅ IDs présents dans les deux = deux noms affichés"
echo "❌ Champ vide = site manquant d’un côté"
echo
echo "=== Résultat du fichier fusionné ==="
echo
column -t -s'|' "$OUT_DIR/merged_sites.txt"

# --- Tableau séparé : fichiers NPM invalides ---
if [[ -s "$INVALID_FILE" ]]; then
  echo
  echo "=== FICHIERS NPM SANS NOM DE DOMAINE VALIDE ==="
  echo
  echo "UUID | NPM_SITE | CONF_FILE"
  echo "-------------------------------------------"
  column -t -s'|' "$INVALID_FILE"
else
  echo
  echo "✅ Aucun fichier NPM vide détecté."
fi
