#!/usr/bin/env bash
# onx-db-dump — mysqldump ile .sql.gz olarak yedek al
# Input:  {"db_name":"onx_xxx_app"}
# Output: {"db_name":"...","file_path":"/tmp/db-dump-onx_xxx_app-<ts>.sql.gz","size_bytes":N,"expires_at":"..."}

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

require_root
require_cmd mysqldump
require_cmd gzip
onx_json_input

DB_NAME="$(onx_json_field db_name)"

[[ -z "$DB_NAME" ]] && onx_die 1 "db_name zorunlu"
[[ "$DB_NAME" =~ ^[a-z0-9_]+$ ]] || onx_die 1 "Gecersiz db_name: '${DB_NAME}'"

TS="$(date +%s)"
OUT_DIR="/var/lib/onoxsoft/db-dumps"
mkdir -p "$OUT_DIR" 2>/dev/null || true
chmod 700 "$OUT_DIR" 2>/dev/null || true
FILE_PATH="${OUT_DIR}/db-dump-${DB_NAME}-${TS}.sql.gz"

onx_log "db-dump: db=${DB_NAME} -> ${FILE_PATH}"

# v3.7: mail user customer DB'leri dump edemez → mysqldump_root kullan
# v3.9: --set-gtid-purged MariaDB'de YOK (MySQL-only) → kaldirildi
# --single-transaction: InnoDB consistent snapshot, locksuz
# --routines + --triggers: stored proc/func + trigger'lari da dahil et
# --quick: satir satir akit (buyuk tablolarda RAM dostu)
# --skip-lock-tables: tablo lock'lamadan dump (--single-transaction yeterli)
# pipefail: mysqldump fail olsa bile gzip success vermesin (gerçek exit code).
# Stderr'i tee ile yakala (debug için, başarısızlık durumunda detay göster).
set -o pipefail
ERR_TMP="$(mktemp)"
mysqldump_root \
    --single-transaction --routines --triggers --quick \
    --skip-lock-tables \
    "$DB_NAME" 2>"$ERR_TMP" | gzip -6 > "$FILE_PATH" || {
    DUMP_ERR="$(cat "$ERR_TMP" 2>/dev/null | tail -3 | tr '\n' '; ')"
    rm -f "$ERR_TMP" "$FILE_PATH" 2>/dev/null || true
    onx_die 3 "mysqldump basarisiz: ${DB_NAME} — ${DUMP_ERR}"
}
rm -f "$ERR_TMP" 2>/dev/null || true

if [[ ! -s "$FILE_PATH" ]]; then
    rm -f "$FILE_PATH" 2>/dev/null || true
    onx_die 3 "Dump dosyasi olusturulamadi veya bos: ${DB_NAME}"
fi

SIZE_BYTES="$(stat -c '%s' "$FILE_PATH" 2>/dev/null || stat -f '%z' "$FILE_PATH" 2>/dev/null || echo 0)"
EXPIRES_AT="$(date -u -d '+30 days' +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -v+30d +"%Y-%m-%dT%H:%M:%SZ")"

json_ok "{\"db_name\":\"${DB_NAME}\",\"file_path\":\"${FILE_PATH}\",\"size_bytes\":${SIZE_BYTES},\"expires_at\":\"${EXPIRES_AT}\"}"
