#!/usr/bin/env bash
# onx-directadmin-list-accounts — Uzak DirectAdmin sunucusundaki tüm kullanıcıları listele.
#
# DA kullanıcıları /usr/local/directadmin/data/users/<user>/ altında; user.conf'tan
# birincil domain + e-posta + suspended okunur. (cPanel listaccts eşdeğeri.)
#
# Input (stdin JSON): {host, port, login_user, auth_method:"password", password}
# Output (stdout JSON):
#   {accounts:[{username,domain,email,suspended,disk_used_mb}], total_disk_used_mb:N,
#    host:"...", directadmin:true}
#
# exit: 0=ok 1=bad input 2=preflight 3=bağlantı/komut hatası
# Deployed to: /usr/local/onoxsoft/bin/onx-directadmin-list-accounts

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

require_root
onx_json_input
onx_ssh_remote_init

if [[ "${MOCK_MODE}" == "1" ]]; then
    jq -nc --arg host "$ONX_SSH_HOST" \
        '{accounts:[{username:"alarabalikcilik",domain:"alarabalikcilik.com",email:"a@x.com",suspended:0,disk_used_mb:512,mysql_db_count:2,email_accounts:5}],
          total_disk_used_mb:512, host:$host, directadmin:true}'
    exit 0
fi

# Uzakta her kullanıcı için TSV: username\tdomain\temail\tsuspended\tdisk_mb\tdb\tmail
# disk → GERÇEK kullanım: du -sm /home/$u (DA user.usage 'quota' bayat olabiliyor: 48.3 vs
#   gerçek 13347 MB). PERFORMANS: du'lar uzakta PARALEL çalışır (xargs -P 12, her biri
#   timeout 120s) → tek geçişte $DUF map'ine yazılır, sonra metadata ile birleştirilir; aksi
#   halde 96 hesabın SIRALI du'su web proxy'sini 504'e düşürüyordu. db/mail → user.usage.
RAW=$(onx_ssh_run 'BASE=/usr/local/directadmin/data/users; USERS=$(ls "$BASE" 2>/dev/null); DUF=$(mktemp); printf "%s\n" $USERS | xargs -P 12 -I{} timeout 120 du -sm /home/{} 2>/dev/null > "$DUF"; for u in $USERS; do c="$BASE/$u/user.conf"; [ -f "$c" ] || continue; dom=$(grep "^domain=" "$c" 2>/dev/null | head -1 | cut -d= -f2); [ -z "$dom" ] && dom=$(head -1 "$BASE/$u/domains.list" 2>/dev/null); em=$(grep "^email=" "$c" 2>/dev/null | head -1 | cut -d= -f2); sp=$(grep "^suspended=" "$c" 2>/dev/null | head -1 | cut -d= -f2); us="$BASE/$u/user.usage"; dk=$(awk -v p="/home/$u" "\$2==p{print \$1}" "$DUF"); dbc=$(grep "^mysql=" "$us" 2>/dev/null | head -1 | cut -d= -f2); mlc=$(grep "^nemails=" "$us" 2>/dev/null | head -1 | cut -d= -f2); printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "$u" "$dom" "$em" "$sp" "${dk:-0}" "${dbc:-0}" "${mlc:-0}"; done; rm -f "$DUF"')

# TSV → JSON. domain'i olmayan (admin/reseller, hosting'siz) satırları ele.
ACCOUNTS=$(printf '%s' "$RAW" | jq -Rsc '
    [ split("\n")[] | select(length>0) | split("\t") | {
        username: (.[0] // ""),
        domain: (.[1] // ""),
        email: (.[2] // ""),
        suspended: (if (.[3] // "") == "yes" then 1 else 0 end),
        disk_used_mb: ((.[4] // "0") | tonumber? // 0),
        mysql_db_count: ((.[5] // "0") | tonumber? // 0),
        email_accounts: ((.[6] // "0") | tonumber? // 0)
    } | select(.username != "" and .domain != "") ]' 2>/dev/null)

if [[ -z "$ACCOUNTS" || "$ACCOUNTS" == "null" ]]; then
    onx_die 3 "DA kullanıcı listesi alınamadı (/usr/local/directadmin/data/users/ okunamadı). Root SSH erişimi var mı + DirectAdmin mi?"
fi

jq -nc \
    --argjson accounts "$ACCOUNTS" \
    --arg host "$ONX_SSH_HOST" \
    '{accounts:$accounts,
      total_disk_used_mb: ([$accounts[].disk_used_mb] | add // 0),
      host:$host, directadmin:true}'
