#!/usr/bin/env bash
#
# onx-dovecot-sessions — Aktif Dovecot IMAP/POP3 session listesi
# (doveadm who parse).
#
# Stdin (JSON): {} (no args)
#
# Stdout (JSON):
#   {
#     "ok": true,
#     "imap": 5,
#     "pop3": 2,
#     "total": 7,
#     "sessions": [
#       {"user":"info@leafport.com.tr","proto":"imap","ip":"1.2.3.4","since":"2026-05-19T11:00:00Z"},
#       ...
#     ]
#   }
#
# Exit codes: 0=ok (her durumda — dovecot kapalıysa bile JSON döner)

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

if ! systemctl is-active --quiet dovecot; then
    echo '{"ok":false,"error":"dovecot not running","running":false,"imap":0,"pop3":0,"total":0,"sessions":[]}'
    exit 0
fi

if ! command -v doveadm >/dev/null 2>&1; then
    echo '{"ok":false,"error":"doveadm CLI not found","imap":0,"pop3":0,"total":0,"sessions":[]}'
    exit 0
fi

# doveadm who çıktısı:
# username                                          # proto (pid)   (ips)
# info@leafport.com.tr                              1 imap          (12345) (1.2.3.4)

WHO_OUTPUT=$(doveadm who 2>/dev/null)

IMAP_COUNT=0
POP3_COUNT=0
SESSIONS_JSON="["

FIRST=1
while IFS= read -r line; do
    # Skip header / empty
    [[ -z "$line" ]] && continue
    [[ "$line" =~ ^username ]] && continue

    # Parse: user pid_count proto (pids) (ips)
    USER=$(echo "$line" | awk '{print $1}')
    PROTO=$(echo "$line" | awk '{print $3}')
    IPS=$(echo "$line" | grep -oE '\([^)]+\)$' | tr -d '()')

    [[ -z "$USER" || -z "$PROTO" ]] && continue

    case "$PROTO" in
        imap) IMAP_COUNT=$((IMAP_COUNT + 1)) ;;
        pop3) POP3_COUNT=$((POP3_COUNT + 1)) ;;
    esac

    [[ $FIRST -eq 1 ]] || SESSIONS_JSON+=","
    FIRST=0
    SESSIONS_JSON+="{\"user\":\"${USER}\",\"proto\":\"${PROTO}\",\"ip\":\"${IPS}\"}"
done <<< "$WHO_OUTPUT"

SESSIONS_JSON+="]"
TOTAL=$((IMAP_COUNT + POP3_COUNT))

echo "{\"ok\":true,\"running\":true,\"imap\":${IMAP_COUNT},\"pop3\":${POP3_COUNT},\"total\":${TOTAL},\"sessions\":${SESSIONS_JSON}}"
exit 0
