#!/usr/bin/env bash
#
# onx-exim-conf-test — exim -bV ile config syntax dogrula
#
# Postfix muadili: onx-postfix-test (postfix check + postconf -n)
#
# Exim "config dump + syntax check" tek komutla yapilir:
#   exim -bV          → version + compile options + ana config parse check
#   exim -bP          → tum parametrelerin etkin degerleri (postconf -n muadili)
#
# Eger config'de syntax hatasi varsa exim -bV stderr'a dokup non-zero rc ile cikar.
#
# stdin: {} (bos veya herhangi JSON)
# stdout: {"ok":true,"check_ok":true,"version":"...","config_dump":"..."}

set -euo pipefail
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
source "${SCRIPT_DIR}/_lib/common.sh"

require_root

INPUT=$(cat 2>/dev/null || echo '{}')

# Exim binary auto-detect (RHEL: /usr/sbin/exim, Debian: /usr/sbin/exim4)
EXIM_BIN=""
for bin in /usr/sbin/exim /usr/sbin/exim4; do
    if [[ -x "$bin" ]]; then
        EXIM_BIN="$bin"
        break
    fi
done

if [[ -z "$EXIM_BIN" ]]; then
    json_fail 2 "exim binary bulunamadi (kurulu mu?)"
fi

# 1) Syntax check via -bV (config parse + version goster)
BV_OUT=$("$EXIM_BIN" -bV 2>&1)
BV_RC=$?

if [[ $BV_RC -ne 0 ]]; then
    # Hatayi JSON guvenli encode et
    ESCAPED=$(printf '%s' "$BV_OUT" | jq -Rs '.')
    echo "{\"ok\":false,\"check_ok\":false,\"error\":${ESCAPED}}" >&2
    exit 3
fi

# Version'i ilk satirdan cek (ornek: "Exim version 4.96 #1 built ...")
VERSION=$(printf '%s\n' "$BV_OUT" | grep -oE 'Exim version [0-9.]+' | head -1 || echo "Exim (unknown)")

# 2) Config dump — onemli parametrelerin etkin degerleri (head 100 satir)
# exim -bP cok genis cikti verir; ilk 100 satir UI'da yeterli
CONFIG_DUMP=$("$EXIM_BIN" -bP 2>/dev/null | head -100 || echo "")

# JSON guvenli encode
CONFIG_ESCAPED=$(printf '%s' "$CONFIG_DUMP" | jq -Rs '.' 2>/dev/null || echo '""')

echo "{\"ok\":true,\"check_ok\":true,\"version\":\"${VERSION}\",\"config_dump\":${CONFIG_ESCAPED}}"
exit 0
