#!/usr/bin/env bash
# Verifică că deploy-ul local trimite către Listara (listara.online).
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT}"
export DEPLOY_CONFIG="${DEPLOY_CONFIG:-deploy/deploy.conf.listara}"
LIB="${ROOT}/deploy/lib"
# shellcheck source=deploy/lib/common.sh
source "${LIB}/common.sh"

LISTARA_IP="192.166.82.76"

PASS=0
FAIL=0
WARN=0
check() {
  local label="$1"
  shift
  if "$@"; then
    printf '  [OK] %s\n' "${label}"
    PASS=$((PASS + 1))
  else
    printf '  [FAIL] %s\n' "${label}"
    FAIL=$((FAIL + 1))
  fi
}
warn_check() {
  local label="$1"
  shift
  if "$@"; then
    printf '  [OK] %s\n' "${label}"
    PASS=$((PASS + 1))
  else
    printf '  [WARN] %s\n' "${label}"
    WARN=$((WARN + 1))
  fi
}

echo "=== Verificare deploy → Listara ==="
echo ""

PROJECT_DIR="${ROOT}" bash "${ROOT}/deploy/lib/install-listara-ssh.sh"
load_config

echo "1. Configurație"
check "DEPLOY_PLATFORM=linux" test "${DEPLOY_PLATFORM}" = "linux"
check "DEPLOY_HOST=${LISTARA_IP} (IP direct)" test "${DEPLOY_HOST}" = "${LISTARA_IP}"
check "DEPLOY_PATH=/opt/apps/main-updater" test "${DEPLOY_PATH}" = "/opt/apps/main-updater"
check "Nu trimite către Windows (207.231.110.240)" test "${DEPLOY_HOST}" != "207.231.110.240"
echo ""

echo "2. SSH + rsync"
check "SSH config (~/.ssh/listara-updater)" test -f "${HOME}/.ssh/listara-updater/config"
check "Cheie privată deploy există" test -f "${SSH_KEY_PATH}"
check "Permisiuni cheie (600)" test "$(stat -c '%a' "${SSH_KEY_PATH}" 2>/dev/null || echo 0)" = "600"
check "known_hosts există" test -f "${SSH_KNOWN_HOSTS}"
check "known_hosts conține ED25519" grep -q 'ssh-ed25519' "${SSH_KNOWN_HOSTS}"

if ssh_cmd "echo OK" >/dev/null 2>&1; then
  printf '  [OK] Conexiune SSH la Listara\n'
  PASS=$((PASS + 1))
else
  printf '  [FAIL] Conexiune SSH la Listara\n'
  FAIL=$((FAIL + 1))
  ssh_cmd "echo OK" 2>&1 | tail -1 | sed 's/^/       /' || true
  echo "       Rulează: bash deploy/run-listara-deploy.sh"
fi

check "rsync disponibil pe Listara" ssh_cmd "command -v rsync" >/dev/null 2>&1
echo ""

echo "3. Destinație pe server"
check "Director app pe Listara" ssh_cmd "test -f ${DEPLOY_PATH}/artisan"
check "post-deploy.sh pe Listara" ssh_cmd "test -x ${DEPLOY_PATH}/deploy/linux/post-deploy.sh"
warn_check "Site HTTPS activ (opțional)" curl -sfI --max-time 10 "https://listara.online" >/dev/null 2>&1
echo ""

echo "4. Simulare rsync (dry-run)"
export DRY_RUN=true
export RUN_BUILD=false
set +e
"${LIB}/rsync-push.sh" >/tmp/deploy-dry-run.log 2>&1
rsync_ec=$?
set -e
if [[ ${rsync_ec} -eq 0 ]]; then
  printf '  [OK] Rsync dry-run reușit (vezi /tmp/deploy-dry-run.log)\n'
  PASS=$((PASS + 1))
  if grep -qE "listara\.online|192\.166\.82\.76" /tmp/deploy-dry-run.log 2>/dev/null; then
    printf '  [OK] Rsync target conține destinația Listara (IP sau domeniu)\n'
    PASS=$((PASS + 1))
  else
    printf '  [FAIL] Rsync target nu conține destinația Listara\n'
    FAIL=$((FAIL + 1))
  fi
elif [[ ${rsync_ec} -eq 23 ]] && grep -q "Syncing" /tmp/deploy-dry-run.log 2>/dev/null; then
  printf '  [WARN] Rsync dry-run exit 23 (permisiuni/atribute) — SSH OK, deploy poate continua\n'
  WARN=$((WARN + 1))
  PASS=$((PASS + 1))
else
  printf '  [FAIL] Rsync dry-run eșuat (exit %s)\n' "${rsync_ec}"
  FAIL=$((FAIL + 1))
  tail -5 /tmp/deploy-dry-run.log 2>/dev/null | sed 's/^/       /'
fi
echo ""

echo "=== Rezultat: ${PASS} OK, ${FAIL} FAIL, ${WARN} WARN ==="
if [[ "${FAIL}" -gt 0 ]]; then
  echo ""
  echo "Remediere rapidă:"
  echo "  cd \"${ROOT}\" && bash deploy/run-listara-deploy.sh"
  exit 1
fi

echo ""
echo "Deploy-ul va trimite actualizările către: ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
echo "Rulează deploy: bash deploy/run-listara-deploy.sh"
