#!/usr/bin/env bash
#
# onx-mailbox-disk-usage — Maildir disk kullanımı + okunmuş/okunmamış sayısı.
#
# Stdin (JSON):
#   {"email": "user@example.com"}
#
# Stdout (JSON):
#   {
#     "email": "...",
#     "maildir": "...",
#     "usage_bytes": N,        // toplam (cur + new + tmp)
#     "cur_bytes": N,          // okunmuş
#     "new_bytes": N,          // okunmamış (unread)
#     "message_count": N,      // toplam
#     "cur_count": N,          // okunmuş sayı
#     "new_count": N,          // okunmamış sayı (UI badge için)
#     "folders": [
#       {"name":"INBOX","cur":N,"new":N,"bytes":N},
#       {"name":"Sent","cur":N,"new":N,"bytes":N},
#       ...
#     ]
#   }

INPUT=$(cat 2>/dev/null || echo '{}')
EMAIL=$(echo "$INPUT" | jq -r '.email // ""')

[[ -z "$EMAIL" ]] && { echo '{"error":"email gerekli"}' >&2; exit 1; }
[[ ! "$EMAIL" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]] && { echo '{"error":"gecersiz email"}' >&2; exit 1; }

LOCAL="${EMAIL%@*}"
DOMAIN="${EMAIL#*@}"
MAILDIR="/var/vmail/${DOMAIN}/${LOCAL}/Maildir"

USAGE_BYTES=0
CUR_BYTES=0
NEW_BYTES=0
MESSAGE_COUNT=0
CUR_COUNT=0
NEW_COUNT=0
FOLDERS_JSON="[]"

if [[ -d "$MAILDIR" ]]; then
    # Toplam disk (cur+new+tmp + subdir maildir++ klasörleri dahil)
    USAGE_BYTES=$(du -sb "$MAILDIR" 2>/dev/null | awk '{print $1}')
    USAGE_BYTES="${USAGE_BYTES:-0}"

    # Root INBOX cur/new
    if [[ -d "${MAILDIR}/cur" ]]; then
        CUR_BYTES=$(du -sb "${MAILDIR}/cur" 2>/dev/null | awk '{print $1}')
        CUR_BYTES="${CUR_BYTES:-0}"
        CUR_COUNT=$(find "${MAILDIR}/cur" -maxdepth 1 -type f 2>/dev/null | wc -l)
    fi
    if [[ -d "${MAILDIR}/new" ]]; then
        NEW_BYTES=$(du -sb "${MAILDIR}/new" 2>/dev/null | awk '{print $1}')
        NEW_BYTES="${NEW_BYTES:-0}"
        NEW_COUNT=$(find "${MAILDIR}/new" -maxdepth 1 -type f 2>/dev/null | wc -l)
    fi

    MESSAGE_COUNT=$((CUR_COUNT + NEW_COUNT))

    # Subfolder breakdown (.Drafts, .Sent, .Trash, .Junk, .Archive ...)
    # Maildir++ format: .FolderName/cur, .FolderName/new
    FOLDERS_JSON="["
    FIRST=1

    # INBOX (root)
    FOLDERS_JSON+="{\"name\":\"INBOX\",\"cur\":${CUR_COUNT},\"new\":${NEW_COUNT},\"bytes\":$((CUR_BYTES + NEW_BYTES))}"
    FIRST=0

    # Sub-folders
    for subdir in "$MAILDIR"/.[!.]*; do
        [[ -d "$subdir" ]] || continue
        FOLDER_NAME=$(basename "$subdir" | sed 's/^\.//')
        [[ -z "$FOLDER_NAME" ]] && continue

        F_CUR=0
        F_NEW=0
        F_BYTES=0
        [[ -d "${subdir}/cur" ]] && F_CUR=$(find "${subdir}/cur" -maxdepth 1 -type f 2>/dev/null | wc -l)
        [[ -d "${subdir}/new" ]] && F_NEW=$(find "${subdir}/new" -maxdepth 1 -type f 2>/dev/null | wc -l)
        F_BYTES=$(du -sb "$subdir" 2>/dev/null | awk '{print $1}')
        F_BYTES="${F_BYTES:-0}"

        # JSON escape folder name (basic — quote ve backslash)
        FOLDER_ESCAPED=$(echo "$FOLDER_NAME" | sed 's/\\/\\\\/g; s/"/\\"/g')

        FOLDERS_JSON+=",{\"name\":\"${FOLDER_ESCAPED}\",\"cur\":${F_CUR},\"new\":${F_NEW},\"bytes\":${F_BYTES}}"

        # Toplam unread/all'a ekle
        NEW_COUNT=$((NEW_COUNT + F_NEW))
        CUR_COUNT=$((CUR_COUNT + F_CUR))
        MESSAGE_COUNT=$((MESSAGE_COUNT + F_CUR + F_NEW))
    done
    FOLDERS_JSON+="]"
fi

cat <<EOF
{"email":"$EMAIL","maildir":"$MAILDIR","usage_bytes":$USAGE_BYTES,"cur_bytes":$CUR_BYTES,"new_bytes":$NEW_BYTES,"message_count":$MESSAGE_COUNT,"cur_count":$CUR_COUNT,"new_count":$NEW_COUNT,"folders":$FOLDERS_JSON}
EOF
exit 0
