#!/usr/bin/env bash
# onx-db-import — .sql veya .sql.gz dosyasini DB'ye yukle
# Input:  {"db_name":"onx_xxx_app","file_path":"/path/to/dump.sql.gz"}
# Output: {"db_name":"...","imported":true,"rows":N,"duration_seconds":N.NN}

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)"
FILE_PATH="$(onx_json_field file_path)"

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

# Path traversal koruma — sadece izin verilen yollar
case "$FILE_PATH" in
    /var/lib/onoxsoft/sql-imports/*|/var/lib/onoxsoft/db-dumps/*|/tmp/onx-import-*) : ;;
    *) onx_die 1 "Dosya izin verilen dizinler disinda: ${FILE_PATH}" ;;
esac

onx_log "db-import: db=${DB_NAME} file=${FILE_PATH}"

_mycnf_tmp

START_TS="$(date +%s.%N)"

# Gzip mi yoksa duz SQL mi?
if [[ "$FILE_PATH" == *.gz ]]; then
    require_cmd gunzip
    gunzip -c "$FILE_PATH" \
        | mysql --defaults-extra-file="$_MYCNF_TMP" "$DB_NAME" \
        || onx_die 3 "mysql import basarisiz (.gz): ${DB_NAME}"
else
    mysql --defaults-extra-file="$_MYCNF_TMP" "$DB_NAME" < "$FILE_PATH" \
        || onx_die 3 "mysql import basarisiz: ${DB_NAME}"
fi

END_TS="$(date +%s.%N)"
DURATION="$(awk -v s="$START_TS" -v e="$END_TS" 'BEGIN { printf "%.2f", e - s }')"

# Toplam satir sayisi (information_schema'dan)
ROWS="$(mysql --defaults-extra-file="$_MYCNF_TMP" --batch --silent --raw information_schema -e \
    "SELECT IFNULL(SUM(TABLE_ROWS),0) FROM TABLES WHERE TABLE_SCHEMA='${DB_NAME}'" 2>/dev/null || echo 0)"

json_ok "{\"db_name\":\"${DB_NAME}\",\"imported\":true,\"rows\":${ROWS:-0},\"duration_seconds\":${DURATION}}"
