#!/usr/bin/env bash
# onx-db-list-tables — Bir veritabanindaki tablolari listele
# Input:  {"db_name":"onx_xxx_app"}
# Output: {"db_name":"...","tables":[{"name":"...","rows":N,"size_bytes":N,"engine":"InnoDB","collation":"..."},...]}

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)"

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

onx_log "db-list-tables: db=${DB_NAME}"

_mycnf_tmp

# information_schema.tables uzerinden tum tablolari cek.
# DATA_LENGTH + INDEX_LENGTH = pratik toplam disk kullanimi.
RESULT="$(mysql --defaults-extra-file="$_MYCNF_TMP" --batch --silent --raw information_schema -e \
    "SELECT TABLE_NAME, IFNULL(TABLE_ROWS,0), IFNULL(DATA_LENGTH,0) + IFNULL(INDEX_LENGTH,0), IFNULL(ENGINE,''), IFNULL(TABLE_COLLATION,'') FROM TABLES WHERE TABLE_SCHEMA='${DB_NAME}' ORDER BY TABLE_NAME" 2>&1)" \
    || onx_die 3 "INFORMATION_SCHEMA okunamadi: ${DB_NAME}"

# Tab-separated cikti -> JSON array
TABLES_JSON="["
sep=""
while IFS=$'\t' read -r name rows size_bytes engine collation; do
    [[ -z "$name" ]] && continue
    TABLES_JSON+="${sep}{\"name\":$(printf '%s' "$name" | jq -Rs '.'),\"rows\":${rows:-0},\"size_bytes\":${size_bytes:-0},\"engine\":$(printf '%s' "$engine" | jq -Rs '.'),\"collation\":$(printf '%s' "$collation" | jq -Rs '.')}"
    sep=","
done <<< "$RESULT"
TABLES_JSON+="]"

json_ok "{\"db_name\":\"${DB_NAME}\",\"tables\":${TABLES_JSON}}"
