#!/usr/bin/env bash
# =============================================================================
# onx-pdns-zone-exists — PowerDNS zone varlık kontrolü (read-only)
# v92 Agent 4
# =============================================================================
#
# Panel'in kendi domain'i (örn onoxsoft.com.tr) PowerDNS gmysql backend'inde
# yönetiliyor mu? Eğer evet → DKIM/SPF/DMARC TXT'leri otomatik publish edilebilir.
# Eğer hayır (external DNS, Cloudflare vs.) → manuel kayıt göster.
#
# v87 Agent 4 PdnsZoneProvisioner.verifyFor() pattern'ı ile uyumlu — bu script
# spesifik olarak PanelDnsPublisher tarafından "publish öncesi gate check" için
# çağrılır. Sadece DB read, side-effect yok.
#
# Stdin JSON:
#   { "zone": "onoxsoft.com.tr" }
#
# Stdout JSON (zone varsa):
#   { "ok": true, "exists": true, "zone": "onoxsoft.com.tr",
#     "domain_id": 7, "kind": "Native", "soa_serial": "2026052807",
#     "record_count": 11 }
#
# Stdout JSON (zone yoksa):
#   { "ok": true, "exists": false, "zone": "onoxsoft.com.tr",
#     "soa_serial": null }
#
# Exit codes:
#   0 = ok (exists=true|false her ikisi de 0 — bilgi sorgusu)
#   1 = invalid input (zone eksik / format hatası)
#   2 = preflight fail (pdns DB unreachable, schema bozuk)
#   3 = execution fail (query yürütülmedi)
# =============================================================================

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=_lib/common.sh
source "${SCRIPT_DIR}/_lib/common.sh"

require_root
require_cmd mysql
require_cmd jq
onx_json_input

ZONE="$(onx_json_field zone)"
[[ -z "$ZONE" ]] && onx_die 1 "zone zorunlu"
onx_validate_domain "$ZONE"
ZONE_LOWER="${ZONE,,}"

onx_log "pdns-zone-exists: zone=${ZONE_LOWER}"

# ─── Preflight: PDNS DB erişim ────────────────────────────────────────────────
PING_RESULT="$(mysql_exec "${ONX_PDNS_DB}" "SELECT 1;" 2>&1)"
if ! echo "$PING_RESULT" | grep -q '^1$'; then
    onx_die 2 "PowerDNS DB erişilemiyor (db=${ONX_PDNS_DB} host=${ONX_PDNS_DB_HOST}): ${PING_RESULT}"
fi

TBL_CHK="$(mysql_exec "${ONX_PDNS_DB}" "SHOW TABLES LIKE 'domains';" 2>&1 | tail -1)"
[[ "$TBL_CHK" == "domains" ]] || onx_die 2 "PowerDNS schema bozuk: 'domains' tablosu yok"

# ─── Zone lookup ──────────────────────────────────────────────────────────────
DOMAIN_ROW="$(mysql_exec "${ONX_PDNS_DB}" \
    "SELECT id, type FROM domains WHERE name='${ZONE_LOWER}' LIMIT 1;" 2>/dev/null)"

if [[ -z "$DOMAIN_ROW" ]]; then
    jq -nc \
        --arg z "${ZONE_LOWER}" \
        '{ok:true, exists:false, zone:$z, soa_serial:null}'
    exit 0
fi

DOMAIN_ID="$(echo "$DOMAIN_ROW" | awk '{print $1}')"
KIND="$(echo "$DOMAIN_ROW" | awk '{print $2}')"

[[ -z "$DOMAIN_ID" || ! "$DOMAIN_ID" =~ ^[0-9]+$ ]] && \
    onx_die 3 "domain_id parse hatası: '${DOMAIN_ROW}'"

# SOA serial (3. field of content column)
SOA_CONTENT="$(mysql_exec "${ONX_PDNS_DB}" \
    "SELECT content FROM records WHERE domain_id=${DOMAIN_ID} AND type='SOA' LIMIT 1;" \
    2>/dev/null | tail -1)"
SOA_SERIAL=""
if [[ -n "$SOA_CONTENT" ]]; then
    SOA_SERIAL="$(echo "$SOA_CONTENT" | awk '{print $3}')"
fi

RECORD_COUNT="$(mysql_exec "${ONX_PDNS_DB}" \
    "SELECT COUNT(*) FROM records WHERE domain_id=${DOMAIN_ID};" 2>/dev/null | tail -1)"
RECORD_COUNT="${RECORD_COUNT:-0}"

jq -nc \
    --arg z "${ZONE_LOWER}" \
    --arg k "${KIND}" \
    --arg s "${SOA_SERIAL}" \
    --argjson did "${DOMAIN_ID}" \
    --argjson rc "${RECORD_COUNT}" \
    '{ok:true, exists:true, zone:$z, domain_id:$did, kind:$k,
      soa_serial:(if $s == "" then null else $s end), record_count:$rc}'

exit 0
