#!/usr/bin/env bash
# onx-db-drop-safe — TEK bir veritabanını GÜVENLE düşür: önce mysqldump yedeği,
# sonra DROP DATABASE. onx-db-drop'tan farkları:
#   1) Yedek-önce-sil (backup=true ise mysqldump → .sql.gz; yedek boşsa DROP İPTAL)
#   2) Migrate edilmiş (<user>_<db>) isimleri de kabul eder (onx-db-drop ^onx_ ile sınırlı)
#   3) SİSTEM/PANEL/paylaşımlı DB'leri ASLA düşürmez (sabit korumalı liste)
#   4) Root kimliği /root/.onox-mysql-root.cnf üzerinden (mysql_exec_root/mysqldump_root)
#
# AccountTerminator, delete_data=true iken hesabın HER kayıtlı DB'si için çağırır.
#
# Input:  {"db_name":"ozge_wp998","backup":true}
# Output: {"db_name":...,"dropped":true|false,"backup_path":"...|"}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_lib/common.sh"

require_root
require_cmd mysql
onx_json_input

DB_NAME="$(onx_json_field db_name)"
BACKUP="$(onx_json_field backup)"

[[ -z "$DB_NAME" ]] && onx_die 1 "db_name zorunlu"

# Geçerli MySQL tanımlayıcı charset (harf/rakam/_/$, en fazla 64) — başka her şeyi reddet
DBRE='^[A-Za-z0-9_$]{1,64}$'
[[ "$DB_NAME" =~ $DBRE ]] || onx_die 1 "Geçersiz db_name: '${DB_NAME}'"

# KORUMALI: sistem + panel + paylaşımlı DB'ler — ne olursa olsun ASLA düşürme
case "$DB_NAME" in
    mysql|information_schema|performance_schema|sys|phpmyadmin|onoxsoft_panel|onoxsoft_pdns|roundcube|roundcubemail)
        onx_die 1 "Korumalı veritabanı düşürülemez: ${DB_NAME}" ;;
esac

# DB gerçekten var mı? Yoksa idempotent başarı (silinecek bir şey yok)
EXISTS="$(mysql_exec_root "" "SELECT COUNT(*) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='${DB_NAME}';" 2>/dev/null | tr -d '[:space:]')"
if [[ "$EXISTS" != "1" ]]; then
    json_ok "{\"db_name\":\"${DB_NAME}\",\"dropped\":false,\"backup_path\":\"\",\"note\":\"yok\"}"
    exit 0
fi

# ── Yedek-önce-sil ────────────────────────────────────────────────────────────
BACKUP_PATH=""
if [[ "$BACKUP" == "true" || "$BACKUP" == "1" ]]; then
    require_cmd mysqldump
    BK_DIR="/var/backups/onoxsoft/account-db"
    mkdir -p "$BK_DIR"
    TS="$(date +%Y%m%d-%H%M%S)"
    BACKUP_PATH="${BK_DIR}/${DB_NAME}-${TS}.sql.gz"
    if mysqldump_root --single-transaction --quick --routines --triggers --events "$DB_NAME" 2>/dev/null | gzip > "$BACKUP_PATH"; then
        if [[ ! -s "$BACKUP_PATH" ]]; then
            rm -f "$BACKUP_PATH"
            onx_die 3 "Yedek boş — DROP iptal: ${DB_NAME}"
        fi
        onx_log "db-drop-safe: yedek alındı ${BACKUP_PATH}"
    else
        rm -f "$BACKUP_PATH" 2>/dev/null || true
        onx_die 3 "mysqldump başarısız — DROP iptal: ${DB_NAME}"
    fi
fi

# ── DROP ──────────────────────────────────────────────────────────────────────
mysql_exec_root "" "DROP DATABASE IF EXISTS \`${DB_NAME}\`;" \
    || onx_die 3 "DROP DATABASE başarısız: ${DB_NAME}"

onx_log "db-drop-safe: dropped ${DB_NAME} (backup=${BACKUP_PATH:-none})"
json_ok "{\"db_name\":\"${DB_NAME}\",\"dropped\":true,\"backup_path\":\"${BACKUP_PATH}\"}"
