#!/usr/bin/env bash
set -euo pipefail

# Uso:
#   ./scripts/utilitarios/Verificar_Fornecedores.sh
#   BRANCH=main REPO_ROOT=/root/Xslt WEB_ROOT=/var/www/alvaroguedes.lat ./scripts/utilitarios/Verificar_Fornecedores.sh

BRANCH="${BRANCH:-main}"
REPO_ROOT="${REPO_ROOT:-/root/Xslt}"
WEB_ROOT="${WEB_ROOT:-/var/www/alvaroguedes.lat}"

OUT_FILE="$WEB_ROOT/output/fornecedores_lookup.xml"
WEB_FILE="$WEB_ROOT/scripts/tables/fornecedores_lookup.xml"
REPO_FILE="$REPO_ROOT/scripts/tables/fornecedores_lookup.xml"

hash_value() {
  local f="$1"
  if [[ -f "$f" ]]; then
    sha1sum "$f" | awk '{print $1}'
  else
    echo ""
  fi
}

print_hash_line() {
  local label="$1"
  local file="$2"
  local hash="$3"

  if [[ -n "$hash" ]]; then
    echo "$label: $hash  $file"
  else
    echo "$label: MISSING  $file"
  fi
}

status_line() {
  local label="$1"
  local status="$2"
  local details="$3"
  echo "$label: $status - $details"
}

echo "=== CONFIG ==="
echo "BRANCH=$BRANCH"
echo "REPO_ROOT=$REPO_ROOT"
echo "WEB_ROOT=$WEB_ROOT"

echo "=== HASHES ==="
OUT_HASH="$(hash_value "$OUT_FILE")"
REPO_HASH="$(hash_value "$REPO_FILE")"
WEB_HASH="$(hash_value "$WEB_FILE")"

print_hash_line "OUT" "$OUT_FILE" "$OUT_HASH"
print_hash_line "REPO" "$REPO_FILE" "$REPO_HASH"
print_hash_line "WEB" "$WEB_FILE" "$WEB_HASH"

echo "=== HASH STATUS ==="
if [[ -z "$OUT_HASH" || -z "$REPO_HASH" || -z "$WEB_HASH" ]]; then
  status_line "FILES" "FAIL" "Um ou mais arquivos não existem"
else
  status_line "FILES" "OK" "Todos os arquivos existem"
fi

if [[ -n "$OUT_HASH" && "$OUT_HASH" == "$REPO_HASH" ]]; then
  status_line "OUT vs REPO" "OK" "Hashes iguais"
else
  status_line "OUT vs REPO" "FAIL" "Hashes diferentes"
fi

if [[ -n "$OUT_HASH" && "$OUT_HASH" == "$WEB_HASH" ]]; then
  status_line "OUT vs WEB" "OK" "Hashes iguais"
else
  status_line "OUT vs WEB" "FAIL" "Hashes diferentes"
fi

if [[ -n "$REPO_HASH" && "$REPO_HASH" == "$WEB_HASH" ]]; then
  status_line "REPO vs WEB" "OK" "Hashes iguais"
else
  status_line "REPO vs WEB" "FAIL" "Hashes diferentes"
fi

if [[ -n "$OUT_HASH" && "$OUT_HASH" == "$REPO_HASH" && "$REPO_HASH" == "$WEB_HASH" ]]; then
  status_line "SYNC_3_WAY" "OK" "Output/Repo/Web sincronizados"
else
  status_line "SYNC_3_WAY" "FAIL" "Há divergência entre output/repo/web"
fi

echo "=== GIT ==="
git -C "$REPO_ROOT" fetch origin "$BRANCH" >/dev/null 2>&1 || true
LOCAL_HEAD="$(git -C "$REPO_ROOT" rev-parse HEAD)"
ORIGIN_HEAD="$(git -C "$REPO_ROOT" rev-parse origin/$BRANCH 2>/dev/null || echo MISSING)"
REMOTE_HEAD="$(git -C "$REPO_ROOT" ls-remote --heads origin "$BRANCH" | awk '{print $1}')"

echo "LOCAL_HEAD=$LOCAL_HEAD"
echo "ORIGIN_HEAD=$ORIGIN_HEAD"
echo "REMOTE_HEAD=$REMOTE_HEAD"

echo "=== GIT STATUS ==="
if [[ "$LOCAL_HEAD" != "" && "$LOCAL_HEAD" == "$ORIGIN_HEAD" ]]; then
  status_line "LOCAL vs ORIGIN" "OK" "HEADs iguais"
else
  status_line "LOCAL vs ORIGIN" "FAIL" "HEADs diferentes"
fi

if [[ "$ORIGIN_HEAD" != "" && "$ORIGIN_HEAD" != "MISSING" && "$ORIGIN_HEAD" == "$REMOTE_HEAD" ]]; then
  status_line "ORIGIN vs REMOTE" "OK" "HEADs iguais"
else
  status_line "ORIGIN vs REMOTE" "FAIL" "HEADs diferentes"
fi

echo "=== STATUS FILE ==="
git -C "$REPO_ROOT" status --short scripts/tables/fornecedores_lookup.xml

echo "=== DONE ==="
