#!/usr/bin/env bash
# database/tables -- table sizes and engines for one database
set -o pipefail
SELF=$(readlink -f "${BASH_SOURCE[0]}")
NV_BASE=$(cd "$(dirname "$SELF")/../../.." && pwd)
export NV_BASE
# shellcheck source=/dev/null
. "$NV_BASE/lib/core/bootstrap.sh"

nv_require_root || exit 1
ui_header "$(t db_m_tables)"
db_available || { ui_err "$(t db_unreachable)"; exit 1; }

if [ $# -ge 1 ]; then name=$1; else
    printf '  %s: ' "$(t db_prompt_name)"
    read -r name || exit 130
fi
name=$(nv_trim "$name")
nv_valid_dbname "$name" || { ui_err "$(t db_bad_name)"; exit 2; }

printf '  %-34s %-10s %-10s %s\n' "$(t db_table)" "$(t col_size)" "$(t db_rows)" "$(t db_engine)"
db_root_exec "SELECT table_name,
                     ROUND((data_length+index_length)/1024/1024,2),
                     table_rows, engine
              FROM information_schema.tables
              WHERE table_schema='$name'
              ORDER BY (data_length+index_length) DESC" 2>/dev/null \
    | while IFS=$'\t' read -r t size rows eng; do
          [ -z "$t" ] && continue
          printf '  %-34s %-10s %-10s %s\n' "$(ui_trunc "$t" 32)" "${size:-0}M" "${rows:-0}" "${eng:--}"
      done

ui_blank
ui_kv "$(t db_table_count)" "$(db_root_exec "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='$name'" 2>/dev/null)"
ui_kv "$(t col_size)" "$(db_root_exec "SELECT ROUND(SUM(data_length+index_length)/1024/1024,2) FROM information_schema.tables WHERE table_schema='$name'" 2>/dev/null) MB"
exit 0
