#!/usr/bin/env bash
# onx-record-remove — PowerDNS kaydını ID ile veya (zone,name,type,content) ile sil
# Input variants:
#   1) {"record_id":42}
#   2) {"zone":"example.com","name":"www.example.com","type":"A","content":"1.2.3.4"}
# Output: {"record_id":42,"removed":true}

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

require_root
require_cmd mysql
onx_json_input

RECORD_ID="$(onx_json_field record_id)"
ZONE="$(onx_json_field zone)"
NAME="$(onx_json_field name)"
TYPE="$(onx_json_field type)"
CONTENT="$(onx_json_field content)"

_mycnf_tmp

# Mode 1: record_id direkt verildi
if [[ -n "$RECORD_ID" ]]; then
    [[ "$RECORD_ID" =~ ^[0-9]+$ ]] || onx_die 1 "Gecersiz record_id: '${RECORD_ID}'"
    onx_log "record-remove: record_id=${RECORD_ID}"
else
    # Mode 2: (zone, name, type, content) — record_id'yi lookup
    [[ -z "$ZONE" ]]    && onx_die 1 "record_id veya (zone,name,type,content) zorunlu"
    [[ -z "$NAME" ]]    && onx_die 1 "name zorunlu (zone modunda)"
    [[ -z "$TYPE" ]]    && onx_die 1 "type zorunlu (zone modunda)"
    [[ -z "$CONTENT" ]] && onx_die 1 "content zorunlu (zone modunda)"

    ZONE_LOWER="${ZONE,,}"
    NAME_LOWER="${NAME,,}"
    TYPE_UPPER="${TYPE^^}"

    DOMAIN_ID="$(mysql_exec "${ONX_PDNS_DB}" \
        "SELECT id FROM domains WHERE name='${ZONE_LOWER}' LIMIT 1;" 2>/dev/null | tail -1)"
    [[ -z "$DOMAIN_ID" || ! "$DOMAIN_ID" =~ ^[0-9]+$ ]] && \
        onx_die 2 "Zone bulunamadi: ${ZONE_LOWER}"

    RECORD_ID="$(mysql_exec "${ONX_PDNS_DB}" \
        "SELECT id FROM records WHERE domain_id=${DOMAIN_ID} AND name='${NAME_LOWER}' AND type='${TYPE_UPPER}' AND content='${CONTENT}' LIMIT 1;" \
        2>/dev/null | tail -1)"
    [[ -z "$RECORD_ID" || ! "$RECORD_ID" =~ ^[0-9]+$ ]] && \
        onx_die 2 "Kayit bulunamadi: ${NAME_LOWER} ${TYPE_UPPER} ${CONTENT}"

    onx_log "record-remove: lookup zone=${ZONE_LOWER} → record_id=${RECORD_ID}"
fi

# Zone adini al (serial bump icin)
ZONE_NAME="$(mysql_exec "${ONX_PDNS_DB}" \
    "SELECT d.name FROM records r JOIN domains d ON r.domain_id=d.id WHERE r.id=${RECORD_ID} LIMIT 1;" \
    2>/dev/null | tail -1)"

mysql_exec "${ONX_PDNS_DB}" "DELETE FROM records WHERE id=${RECORD_ID};" \
    || onx_die 3 "Kayit silme basarisiz: id=${RECORD_ID}"

# Serial bump — regex-free, full SOA reconstruct (safer)
if [[ -n "$ZONE_NAME" ]]; then
    SOA_CURRENT="$(mysql_exec "${ONX_PDNS_DB}" \
        "SELECT r.content FROM records r JOIN domains d ON r.domain_id=d.id WHERE d.name='${ZONE_NAME}' AND r.type='SOA' LIMIT 1;" 2>/dev/null | tail -1)"
    if [[ -n "${SOA_CURRENT}" ]]; then
        SOA_NS="$(echo "${SOA_CURRENT}" | awk '{print $1}')"
        SOA_ADMIN="$(echo "${SOA_CURRENT}" | awk '{print $2}')"
        [[ -z "${SOA_NS}" ]]    && SOA_NS="ns3.onoxsoft.com.tr"
        [[ -z "${SOA_ADMIN}" ]] && SOA_ADMIN="hostmaster.onoxsoft.com.tr"
        NEW_SERIAL="$(date +%Y%m%d)$(printf '%02d' "$(($(date +%S) % 99))")"
        NEW_SOA="${SOA_NS} ${SOA_ADMIN} ${NEW_SERIAL} 7200 3600 1209600 3600"
        mysql_exec "${ONX_PDNS_DB}" \
            "UPDATE records r JOIN domains d ON r.domain_id=d.id SET r.content='${NEW_SOA}' WHERE d.name='${ZONE_NAME}' AND r.type='SOA';" \
            2>/dev/null || true
    fi
    pdns_control notify "${ZONE_NAME}" 2>/dev/null || true
fi

json_ok "{\"record_id\":${RECORD_ID},\"removed\":true}"
