#!/usr/bin/env bash
# =============================================================================
# onx-ftp-pure-user-quota — Pure-FTPd PureDB virtual user kota set
#
# v88 Agent 3 — Default FTP User System.
# pure-pw usermod -n <files> -N <size_mb> ile per-user kota uygular.
#
# Input (stdin JSON):
#   {
#     "username":    "onx_xxxx",       -- required
#     "files_max":   1000,             -- 0 = sinirsiz
#     "size_mb":     500,              -- 0 = sinirsiz
#     "puredb_path": "/etc/pure-ftpd/pureftpd.pdb",
#     "passwd_path": "/etc/pure-ftpd/pureftpd.passwd"
#   }
#
# Output: {"ok":true,"username":"...","files_max":N,"size_mb":N,"mkdb_run":true}
# Exit codes: 0=ok 1=invalid-input 2=preflight 3=exec-fail
# =============================================================================

set -euo pipefail

SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# shellcheck source=_lib/common.sh
source "${SCRIPT_DIR}/_lib/common.sh"

require_root
command -v jq      >/dev/null 2>&1 || onx_die 2 "jq gerekli"
command -v pure-pw >/dev/null 2>&1 || onx_die 2 "pure-pw bulunamadi"
onx_json_input

USERNAME=$(onx_json_field username)
FILES_MAX=$(onx_json_field files_max "0")
SIZE_MB=$(onx_json_field   size_mb   "0")
PUREDB=$(onx_json_field    puredb_path "/etc/pure-ftpd/pureftpd.pdb")
PASSWD=$(onx_json_field    passwd_path "/etc/pure-ftpd/pureftpd.passwd")

[[ -z "${USERNAME}" ]] && onx_die 1 "username zorunlu"
[[ "${USERNAME}" =~ ^onx_[a-z0-9_]{3,30}$ ]] || onx_die 1 "username gecersiz: ${USERNAME}"
[[ "${FILES_MAX}" =~ ^[0-9]+$ ]] || onx_die 1 "files_max sayisal olmali"
[[ "${SIZE_MB}"   =~ ^[0-9]+$ ]] || onx_die 1 "size_mb sayisal olmali"

[[ -f "${PASSWD}" ]] || onx_die 2 "pureftpd.passwd bulunamadi (${PASSWD})"

if ! pure-pw show "${USERNAME}" -f "${PASSWD}" >/dev/null 2>&1; then
    onx_die 2 "FTP kullanici bulunamadi: ${USERNAME}"
fi

if ! pure-pw usermod "${USERNAME}" -n "${FILES_MAX}" -N "${SIZE_MB}" \
    -f "${PASSWD}" 2>/dev/null; then
    onx_die 3 "pure-pw usermod (kota) basarisiz: ${USERNAME}"
fi

MKDB_RUN="false"
if pure-pw mkdb "${PUREDB}" -f "${PASSWD}" 2>/dev/null; then
    MKDB_RUN="true"
else
    onx_die 3 "pure-pw mkdb basarisiz (kota yazildi ama DB sync olmadi)"
fi

onx_log "ftp-pure-user-quota: user=${USERNAME} files=${FILES_MAX} size=${SIZE_MB}MB"

jq -nc \
    --arg username "${USERNAME}" \
    --argjson files_max "${FILES_MAX}" \
    --argjson size_mb   "${SIZE_MB}" \
    --argjson mkdb_run  "${MKDB_RUN}" \
    '{
        ok: true,
        username: $username,
        files_max: $files_max,
        size_mb:   $size_mb,
        mkdb_run:  $mkdb_run
    }'
