#!/usr/bin/env bash
# ============================================================
# Copyright (c) 2026 RAVAPI Soluções. www.ravapi.com
# PostgreSQL local para desenvolvimento
#   ./scripts/dev-db.sh up|down|migrate|psql
# ============================================================
set -euo pipefail

PGBIN=${PGBIN:-/usr/lib/postgresql/16/bin}
PGDATA=${PGDATA:-$HOME/.recibos-pgdata}
PORT=${PGPORT:-5599}
SOCK=${PGHOST:-/tmp}
DB=${PGDATABASE:-recibos_dev}
RAIZ="$(cd "$(dirname "$0")/.." && pwd)"
export PATH="$PGBIN:$PATH"

case "${1:-up}" in
  up)
    if [ ! -d "$PGDATA/base" ]; then
      echo "► inicializando cluster em $PGDATA"
      initdb -D "$PGDATA" -U postgres --auth=trust -E UTF8 --locale=C >/dev/null
    fi
    pg_ctl -D "$PGDATA" -l /tmp/recibos-pg.log \
      -o "-k $SOCK -p $PORT -c listen_addresses=''" start
    sleep 2
    psql -h "$SOCK" -p "$PORT" -U postgres -tc "select 'pronto na porta $PORT'"
    ;;
  down)
    pg_ctl -D "$PGDATA" stop
    ;;
  migrate)
    psql -h "$SOCK" -p "$PORT" -U postgres \
      -c "DROP DATABASE IF EXISTS $DB;" -c "CREATE DATABASE $DB;" >/dev/null
    for f in "$RAIZ"/db/migrations/*.sql; do
      echo "► $(basename "$f")"
      psql -h "$SOCK" -p "$PORT" -U postgres -d "$DB" -v ON_ERROR_STOP=1 -f "$f" >/dev/null
    done
    psql -h "$SOCK" -p "$PORT" -U postgres -d "$DB" \
      -c "GRANT CONNECT ON DATABASE $DB TO recibos_app;" >/dev/null
    echo "► $DB pronto"
    ;;
  psql)
    psql -h "$SOCK" -p "$PORT" -U postgres -d "$DB"
    ;;
  *)
    echo "uso: $0 up|down|migrate|psql" >&2; exit 1 ;;
esac
