#!/bin/bash

# Email Deliverability Check Script
# Checks DNS records, server reputation, and email authentication

set -euo pipefail

DOMAIN="${1:-globalgalashow.com}"
MAIL_SERVER="mail.${DOMAIN}"

echo "🔍 Email Deliverability Check for ${DOMAIN}"
echo "=================================================="
echo ""

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

check_dns_record() {
    local record_type=$1
    local record_name=$2
    local description=$3

    echo -n "Checking ${description}... "

    if dig +short "${record_name}" "${record_type}" | grep -q .; then
        echo -e "${GREEN}✓ Found${NC}"
        dig +short "${record_name}" "${record_type}" | sed 's/^/  /'
    else
        echo -e "${RED}✗ Not Found${NC}"
        return 1
    fi
    echo ""
}

# 1. Check MX Records
echo "📧 1. MX Records (Mail Exchange)"
echo "--------------------------------"
check_dns_record MX "${DOMAIN}" "MX Records" || echo -e "${RED}⚠️  No MX records found - email cannot be received!${NC}\n"

# 2. Check SPF Record
echo "🔐 2. SPF Record (Sender Policy Framework)"
echo "------------------------------------------"
if check_dns_record TXT "${DOMAIN}" "SPF Record"; then
    spf=$(dig +short "${DOMAIN}" TXT | grep "v=spf1" || echo "")
    if [[ -n "$spf" ]]; then
        echo -e "${GREEN}✓ SPF Record Valid${NC}"
        echo "  ${spf}"
    else
        echo -e "${YELLOW}⚠️  SPF record exists but may not be valid${NC}"
    fi
else
    echo -e "${RED}✗ No SPF record found${NC}"
    echo "  Add this TXT record to ${DOMAIN}:"
    echo "  v=spf1 include:${MAIL_SERVER} ~all"
fi
echo ""

# 3. Check DKIM Record
echo "🔑 3. DKIM Record (DomainKeys Identified Mail)"
echo "----------------------------------------------"
DKIM_SELECTOR="default"
if check_dns_record TXT "${DKIM_SELECTOR}._domainkey.${DOMAIN}" "DKIM Record"; then
    echo -e "${GREEN}✓ DKIM Record Found${NC}"
else
    echo -e "${YELLOW}⚠️  DKIM not found with 'default' selector${NC}"
    echo "  Check cPanel → Email Authentication for correct selector"
    echo "  Common selectors: default, mail, dkim"
fi
echo ""

# 4. Check DMARC Record
echo "📊 4. DMARC Record (Domain-based Message Authentication)"
echo "--------------------------------------------------------"
if check_dns_record TXT "_dmarc.${DOMAIN}" "DMARC Record"; then
    dmarc=$(dig +short "_dmarc.${DOMAIN}" TXT | tr -d '"' || echo "")
    if [[ "$dmarc" == *"v=DMARC1"* ]]; then
        echo -e "${GREEN}✓ DMARC Record Valid${NC}"
        echo "  ${dmarc}"
    else
        echo -e "${YELLOW}⚠️  DMARC record exists but may not be valid${NC}"
    fi
else
    echo -e "${RED}✗ No DMARC record found${NC}"
    echo "  Add this TXT record to _dmarc.${DOMAIN}:"
    echo "  v=DMARC1; p=none; rua=mailto:dmarc@${DOMAIN}"
fi
echo ""

# 5. Check Mail Server IP
echo "🌐 5. Mail Server IP Address"
echo "----------------------------"
MAIL_IP=$(dig +short "${MAIL_SERVER}" A | head -1)
if [[ -n "$MAIL_IP" ]]; then
    echo -e "${GREEN}✓ Mail Server IP: ${MAIL_IP}${NC}"
    echo ""

    # Check if IP is blacklisted (simple check)
    echo "  Checking common blacklists..."

    # Check Spamhaus ZEN
    REVERSE_IP=$(echo "${MAIL_IP}" | awk -F. '{print $4"."$3"."$2"."$1}')
    if dig +short "${REVERSE_IP}.zen.spamhaus.org" | grep -q "127.0.0"; then
        echo -e "  ${RED}✗ Listed on Spamhaus ZEN${NC}"
    else
        echo -e "  ${GREEN}✓ Not listed on Spamhaus ZEN${NC}"
    fi

    # Check SpamCop
    if dig +short "${REVERSE_IP}.bl.spamcop.net" | grep -q "127.0.0"; then
        echo -e "  ${RED}✗ Listed on SpamCop${NC}"
    else
        echo -e "  ${GREEN}✓ Not listed on SpamCop${NC}"
    fi

    echo ""
    echo "  For comprehensive check, visit:"
    echo "  https://mxtoolbox.com/SuperTool.aspx?action=blacklist:${MAIL_IP}"
else
    echo -e "${RED}✗ Mail server ${MAIL_SERVER} has no A record${NC}"
fi
echo ""

# 6. Check PTR (Reverse DNS)
echo "🔄 6. PTR Record (Reverse DNS)"
echo "------------------------------"
if [[ -n "$MAIL_IP" ]]; then
    PTR=$(dig +short -x "${MAIL_IP}" | sed 's/\.$//' || echo "")
    if [[ -n "$PTR" ]]; then
        echo -e "${GREEN}✓ PTR Record: ${PTR}${NC}"

        # Check if PTR matches domain
        if [[ "$PTR" == *"${DOMAIN}"* ]] || [[ "$PTR" == "${MAIL_SERVER}"* ]]; then
            echo -e "  ${GREEN}✓ PTR matches domain${NC}"
        else
            echo -e "  ${YELLOW}⚠️  PTR doesn't match domain (may affect deliverability)${NC}"
        fi
    else
        echo -e "${RED}✗ No PTR record found${NC}"
        echo "  Contact hosting provider to set PTR record for ${MAIL_IP}"
    fi
else
    echo -e "${YELLOW}⚠️  Cannot check PTR without mail server IP${NC}"
fi
echo ""

# 7. Test SMTP Connection
echo "📬 7. SMTP Connection Test"
echo "--------------------------"
echo "Testing connection to ${MAIL_SERVER}:587..."

if timeout 5 bash -c "cat < /dev/null > /dev/tcp/${MAIL_SERVER}/587" 2>/dev/null; then
    echo -e "${GREEN}✓ SMTP port 587 is open${NC}"
else
    echo -e "${RED}✗ Cannot connect to SMTP port 587${NC}"
fi

if timeout 5 bash -c "cat < /dev/null > /dev/tcp/${MAIL_SERVER}/465" 2>/dev/null; then
    echo -e "${GREEN}✓ SMTP port 465 (SSL) is open${NC}"
else
    echo -e "${YELLOW}⚠️  SMTP port 465 not accessible (optional)${NC}"
fi
echo ""

# 8. Summary
echo "📋 Summary & Recommendations"
echo "============================="
echo ""

ISSUES=0

# Check SPF
if ! dig +short "${DOMAIN}" TXT | grep -q "v=spf1"; then
    echo -e "${RED}⚠️  ADD SPF RECORD (Critical)${NC}"
    echo "   v=spf1 include:${MAIL_SERVER} ~all"
    ((ISSUES++))
fi

# Check DKIM
if ! dig +short "${DKIM_SELECTOR}._domainkey.${DOMAIN}" TXT | grep -q "."; then
    echo -e "${YELLOW}⚠️  ADD DKIM RECORD (Important)${NC}"
    echo "   Check cPanel → Email Authentication"
    ((ISSUES++))
fi

# Check DMARC
if ! dig +short "_dmarc.${DOMAIN}" TXT | grep -q "v=DMARC1"; then
    echo -e "${YELLOW}⚠️  ADD DMARC RECORD (Important)${NC}"
    echo "   v=DMARC1; p=none; rua=mailto:dmarc@${DOMAIN}"
    ((ISSUES++))
fi

if [[ $ISSUES -eq 0 ]]; then
    echo -e "${GREEN}✅ All critical records configured!${NC}"
    echo ""
    echo "Next steps:"
    echo "1. Test email sending: php artisan email:check --send-test"
    echo "2. Send test invitation: php artisan invitations:send-bulk --dry-run"
    echo "3. Start warm-up: See docs/EMAIL_WARMUP_STRATEGY.md"
else
    echo ""
    echo -e "${RED}⚠️  ${ISSUES} issue(s) found - fix before bulk sending!${NC}"
    echo ""
    echo "How to fix:"
    echo "1. Log into cPanel"
    echo "2. Go to Zone Editor or Email Authentication"
    echo "3. Add missing DNS records"
    echo "4. Wait 24-48 hours for DNS propagation"
    echo "5. Re-run this script to verify"
fi

echo ""
echo "🔗 Additional Tools:"
echo "   - Full test: https://www.mail-tester.com/"
echo "   - Blacklist check: https://mxtoolbox.com/blacklists.aspx"
echo "   - DMARC monitor: https://dmarc.org/dmarc-tools/"
echo ""
