#!/usr/bin/env bash
# Find why Gmail replies never hit the inbound pipe log.
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"

HOME_DIR="${HOME:-/home/$(whoami)}"
LOG="${HOME_DIR}/logs/email-inbound-pipe.log"
DOMAIN="${INBOUND_DOMAIN:-ronnieridge.com}"
REAL_TOKEN="${1:-}"

echo "=========================================="
echo "Inbound mail diagnosis — $(date -Iseconds)"
echo "User: $(whoami) | Domain: ${DOMAIN}"
echo "=========================================="

echo ""
echo ">> 1) DNS (MX must point to this server)"
if command -v dig >/dev/null 2>&1; then
  dig +short MX "${DOMAIN}" || true
  dig +short A "mail.${DOMAIN}" || true
else
  host -t MX "${DOMAIN}" 2>/dev/null || nslookup -type=mx "${DOMAIN}" 2>/dev/null || true
fi

echo ""
echo ">> 2) Mailboxes that BREAK plus-addressing (must NOT exist):"
for box in wos reply inbound; do
  path="${HOME_DIR}/mail/${DOMAIN}/${box}"
  if [[ -d "${path}" ]]; then
    echo "   *** FOUND ${box}@${DOMAIN} → wos+token / reply+token go HERE, NOT the pipe!"
    echo "       Path: ${path}"
    echo "       FIX: Delete this email account in cPanel, or read replies in webmail for ${box}@"
  else
    echo "   OK — no ${box}@${DOMAIN} mailbox"
  fi
done

echo ""
echo ">> 3) ronnie@ mailbox (if Default Address = Forward, replies land here):"
RONNIE_PATH="${HOME_DIR}/mail/${DOMAIN}/ronnie"
if [[ -d "${RONNIE_PATH}" ]]; then
  echo "   ronnie@${DOMAIN} exists — check webmail if Default Address forwards here"
  recent="$(find "${RONNIE_PATH}/new" "${RONNIE_PATH}/cur" -type f 2>/dev/null | head -5 || true)"
  if [[ -n "${recent}" ]]; then
    echo "   Recent mail files in ronnie@ (sample paths):"
    echo "${recent}" | head -3 | sed 's/^/     /'
  fi
fi

echo ""
echo ">> 4) Pipe log (Gmail reply should add lines here):"
if [[ -f "${LOG}" ]]; then
  tail -8 "${LOG}" | sed 's/^/   /'
else
  echo "   (no log yet — pipe never ran)"
fi

echo ""
echo ">> 5) Webhook + real token test"
if [[ -f .env ]]; then
  SECRET="$(grep -E '^[[:space:]]*EMAIL_INBOUND_WEBHOOK_SECRET=' .env | tail -1 | cut -d= -f2- | tr -d '\r"'"'"' ' | xargs)"
  WEBHOOK="${EMAIL_INBOUND_WEBHOOK_URL:-https://company-api.ronnieridge.com/api/email/inbound/webhook}"
  if [[ -z "${REAL_TOKEN}" ]] && command -v mysql >/dev/null 2>&1; then
    DB_NAME="$(grep -E '^[[:space:]]*DATABASE_NAME=' .env | tail -1 | cut -d= -f2- | tr -d '\r"'"'"' ' | xargs)"
    DB_USER="$(grep -E '^[[:space:]]*DATABASE_USER=' .env | tail -1 | cut -d= -f2- | tr -d '\r"'"'"' ' | xargs)"
    DB_PASS="$(grep -E '^[[:space:]]*DATABASE_PASSWORD=' .env | tail -1 | cut -d= -f2- | tr -d '\r"'"'"' ' | xargs)"
    DB_HOST="$(grep -E '^[[:space:]]*DATABASE_HOST=' .env | tail -1 | cut -d= -f2- | tr -d '\r"'"'"' ' | xargs)"
    REAL_TOKEN="$(mysql -h"${DB_HOST:-127.0.0.1}" -u"${DB_USER}" -p"${DB_PASS}" "${DB_NAME}" -N -e \
      "SELECT tracking_token FROM email_campaign_recipients WHERE tracking_token IS NOT NULL ORDER BY id DESC LIMIT 1" 2>/dev/null || true)"
  fi
  if [[ -n "${REAL_TOKEN}" && -n "${SECRET}" ]]; then
    echo "   Token: ${REAL_TOKEN}"
    HTTP="$(curl -s -o /tmp/inbound-diag.json -w '%{http_code}' -X POST "${WEBHOOK}" \
      -H 'Content-Type: application/json' \
      -H "x-email-webhook-secret: ${SECRET}" \
      -d "{\"from\":\"diag@gmail.com\",\"subject\":\"Re: test\",\"text\":\"diag\",\"trackingToken\":\"${REAL_TOKEN}\"}")"
    echo "   curl webhook → HTTP ${HTTP} $(head -c 150 /tmp/inbound-diag.json 2>/dev/null)"
    if [[ "${HTTP}" == "201" ]]; then
      echo "   OK — API accepts this token; problem is mail NOT reaching pipe"
    fi
  else
    echo "   Skip (pass token as arg, or fix mysql/.env)"
  fi
fi

echo ""
echo ">> 6) Local delivery test (simulates server receiving mail — should hit pipe log)"
PIPE="${HOME_DIR}/bin/cpanel-email-inbound-pipe.php"
TEST_TOKEN="${REAL_TOKEN:-d70102fa39b24bbeb7f15bb8909f5503}"
if [[ -x "${PIPE}" ]] || [[ -f "${PIPE}" ]]; then
  BEFORE="$(wc -l < "${LOG}" 2>/dev/null || echo 0)"
  printf 'From: happybro6516@gmail.com\r\nTo: wos+%s@%s\r\nSubject: Re: local delivery test\r\n\r\nLocal MTA test body\r\n' \
    "${TEST_TOKEN}" "${DOMAIN}" | php "${PIPE}"
  sleep 1
  AFTER="$(wc -l < "${LOG}" 2>/dev/null || echo 0)"
  if [[ "${AFTER}" -gt "${BEFORE}" ]]; then
    echo "   OK — pipe ran (new log lines). Last:"
    tail -2 "${LOG}" | sed 's/^/     /'
  else
    echo "   WARN — pipe did not append log"
  fi

  if command -v /usr/sbin/sendmail >/dev/null 2>&1; then
    echo "   Trying sendmail → wos+${TEST_TOKEN}@${DOMAIN} …"
    BEFORE2="$(wc -l < "${LOG}" 2>/dev/null || echo 0)"
    /usr/sbin/sendmail -i -f "happybro6516@gmail.com" "wos+${TEST_TOKEN}@${DOMAIN}" <<EOF
Subject: Re: sendmail routing test

sendmail local routing test
EOF
    sleep 3
    AFTER2="$(wc -l < "${LOG}" 2>/dev/null || echo 0)"
    if [[ "${AFTER2}" -gt "${BEFORE2}" ]]; then
      echo "   OK — sendmail triggered pipe (Default Address = Pipe is working)"
    else
      echo "   *** FAIL — sendmail did NOT trigger pipe"
      echo "   FIX cPanel: Email → Default Address → ${DOMAIN}"
      echo "        Must be: Pipe to Program → bin/cpanel-email-inbound-pipe.php"
      echo "        NOT: Forward / Discard / Fail"
    fi
  else
    echo "   (sendmail not in PATH — skip MTA routing test)"
  fi
fi

echo ""
echo ">> 7) Root-only (run as root if sendmail test failed):"
echo "   grep 'wos+' /var/log/exim_mainlog | tail -20"
echo "   grep 'd70102fa' /var/log/exim_mainlog | tail -10"
echo ""
echo "=========================================="
echo "SUMMARY"
echo "- HTTP 400 on setup-test token = NORMAL (fake token)"
echo "- Gmail reply with NO log line = mail never piped"
echo "- Fix: Default Address PIPE + delete wos@/reply@ mailboxes"
echo "- Or check ronnie@ webmail if Default Address = Forward"
echo "=========================================="
