#!/usr/bin/env bash
#
# onx-rspamd-stats — Rspamd istatistikleri (admin Mail Stack dashboard için)
#
# Stdin (JSON): {} (no args)
#
# Stdout (JSON):
#   {
#     "ok": true,
#     "scanned": 1234,
#     "learned": 56,
#     "spam": 12,
#     "ham": 1222,
#     "uptime_since": "Tue 2026-05-19 11:36:07 CEST",
#     "webui": "http://127.0.0.1:11334"
#   }
#
# Exit codes: 0=ok (her durumda — rspamd kapalıysa bile JSON döner)

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

if ! systemctl is-active --quiet rspamd; then
    echo '{"ok":false,"error":"rspamd not running","running":false}'
    exit 0
fi

if ! command -v rspamc >/dev/null 2>&1; then
    echo '{"ok":false,"error":"rspamc CLI not found"}'
    exit 0
fi

# rspamc stat parse
# rspamc format: "Messages with action reject: 0, 0.00%"
# Son alan yüzde içerir (JSON için invalid). Sayıyı virgülden önce al.
STATS=$(rspamc stat 2>/dev/null)

# Helper: parse integer from "X, Y.YY%" format → return X
parse_count() {
    local line="$1"
    # "Messages with action reject: 0, 0.00%" → "0"
    # "Messages scanned: 1234" → "1234"
    echo "$line" | sed -E 's/.*:\s*([0-9]+).*/\1/' | head -1
}

SCANNED=$(parse_count "$(echo "$STATS" | grep -E '^Messages scanned:' | head -1)")
LEARNED=$(parse_count "$(echo "$STATS" | grep -E '^Learned ' | head -1)")
SPAM=$(parse_count "$(echo "$STATS" | grep -E 'action reject:' | head -1)")
HAM=$(parse_count "$(echo "$STATS" | grep -E 'action no action:' | head -1)")
SOFT_REJECT=$(parse_count "$(echo "$STATS" | grep -E 'action soft reject:' | head -1)")
GREYLIST=$(parse_count "$(echo "$STATS" | grep -E 'action greylist:' | head -1)")

# Default 0 if empty or non-numeric
[[ ! "$SCANNED" =~ ^[0-9]+$ ]] && SCANNED=0
[[ ! "$LEARNED" =~ ^[0-9]+$ ]] && LEARNED=0
[[ ! "$SPAM" =~ ^[0-9]+$ ]] && SPAM=0
[[ ! "$HAM" =~ ^[0-9]+$ ]] && HAM=0
[[ ! "$SOFT_REJECT" =~ ^[0-9]+$ ]] && SOFT_REJECT=0
[[ ! "$GREYLIST" =~ ^[0-9]+$ ]] && GREYLIST=0

# Uptime
UPTIME=$(systemctl show rspamd --property=ActiveEnterTimestamp --value 2>/dev/null)

# Rspamd version
VERSION=$(rspamadm --version 2>/dev/null | head -1 | awk '{print $NF}')

cat <<JSON
{"ok":true,"running":true,"version":"${VERSION}","scanned":${SCANNED},"learned":${LEARNED},"spam":${SPAM},"ham":${HAM},"soft_reject":${SOFT_REJECT},"greylist":${GREYLIST},"uptime_since":"${UPTIME}","webui":"http://127.0.0.1:11334"}
JSON

exit 0
