#!/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}"

_mycnf_tmp

# --single-transaction: InnoDB consistent snapshot, locksuz
# --routines + --triggers: stored proc/func + trigger'lari da dahil et
# --quick: satir satir akit (buyuk tablolarda RAM dostu)
mysqldump --defaults-extra-file="$_MYCNF_TMP" \
    --single-transaction --routines --triggers --quick \
    --skip-lock-tables --set-gtid-purged=OFF \
    "$DB_NAME" 2>/dev/null | gzip -6 > "$FILE_PATH" \
    || onx_die 3 "mysqldump basarisiz: ${DB_NAME}"

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}\"}"
