#!/usr/bin/env bash
# ============================================================================
#  Nexus — exporta SÓ A ESTRUTURA do banco (sem dados) via mariadb-dump.
#  Lê as credenciais do api/.env. Roda em qualquer terminal Linux/macOS.
#
#  Uso:
#    ./db_estrutura.sh [arquivo_de_saida.sql]
#
#  Sem argumento, grava em ../database/estrutura_<banco>_<data>.sql
# ============================================================================
set -euo pipefail

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="$DIR/../.env"

if [ ! -f "$ENV_FILE" ]; then
  echo "[ERRO] Não encontrei o .env em: $ENV_FILE" >&2
  exit 1
fi

# Lê uma chave do .env (remove aspas e CR do Windows).
env_get() {
  grep -E "^$1=" "$ENV_FILE" | head -1 | cut -d= -f2- | sed -e 's/\r$//' -e 's/^"//' -e 's/"$//'
}

DB_HOST="$(env_get DB_HOST)";       DB_HOST="${DB_HOST:-127.0.0.1}"
DB_PORT="$(env_get DB_PORT)";       DB_PORT="${DB_PORT:-3306}"
DB_NAME="$(env_get DB_DATABASE)"
DB_USER="$(env_get DB_USERNAME)"
DB_PASS="$(env_get DB_PASSWORD)"

if [ -z "$DB_NAME" ] || [ -z "$DB_USER" ]; then
  echo "[ERRO] DB_DATABASE/DB_USERNAME não definidos no .env." >&2
  exit 1
fi

# Prefere o mariadb-dump; cai para o mysqldump se necessário.
DUMP="$(command -v mariadb-dump || command -v mysqldump || true)"
if [ -z "$DUMP" ]; then
  echo "[ERRO] mariadb-dump/mysqldump não encontrado no PATH." >&2
  exit 1
fi

OUT="${1:-$DIR/../database/estrutura_${DB_NAME}_$(date +%Y%m%d_%H%M%S).sql}"
mkdir -p "$(dirname "$OUT")"

echo "Exportando ESTRUTURA de '$DB_NAME' ($DB_HOST:$DB_PORT) com $(basename "$DUMP")..."

# MYSQL_PWD evita senha na linha de comando (e problemas com caracteres especiais).
# --no-data = só estrutura | --routines/--triggers/--events = procedures/triggers/eventos
MYSQL_PWD="$DB_PASS" "$DUMP" \
  --no-data \
  --routines --triggers --events \
  --single-transaction --skip-lock-tables --no-tablespaces \
  --default-character-set=utf8mb4 \
  --add-drop-table \
  -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" \
  "$DB_NAME" > "$OUT"

SIZE="$(wc -c < "$OUT" | tr -d ' ')"
echo "OK: estrutura exportada."
echo "  Arquivo: $OUT"
echo "  Tamanho: $SIZE bytes"
