#!/usr/bin/env bash
# =============================================================================
# db/apply-local-ddl.sh
# -----------------------------------------------------------------------------
# 권위 DDL(docs/*-ddl.sql)을 실행 중인 로컬 DB 컨테이너에 즉시 적용한다.
#
# 배경: 이 프로젝트는 flyway/liquibase 가 없다(docs/usage/local-setup.md §4).
#   db/schema.sql 은 컨테이너 *최초* 기동 시 docker-entrypoint-initdb.d 로 1회만
#   자동 주입되므로, 그 이후 docs/*-ddl.sql 로 추가된 스키마 변경은 실행 DB 에
#   자동 반영되지 않는다. 데이터를 잃는 `docker compose down -v` 대신, 이 스크립트로
#   변경분을 실행 DB 에 비파괴 적용해 곧바로 로컬 테스트할 수 있다.
#
# 안전성: 모든 docs/*-ddl.sql 은 멱등(IF NOT EXISTS / DO $$ guard / CREATE OR
#   REPLACE)하게 작성한다. 따라서 전체를 몇 번 재실행해도 기존 객체는 NOTICE 후
#   skip 되고 누락분만 생성된다. ON_ERROR_STOP=1 로 첫 에러에서 즉시 중단한다.
#
# 사용:
#   db/apply-local-ddl.sh                              # docs/*-ddl.sql 전체 적용(기본)
#   db/apply-local-ddl.sh docs/game-reviews-ddl.sql    # 특정 파일만 적용
#
# 환경변수 override(기본값은 .env 에서 로드):
#   DB_CONTAINER (기본 bibimbap-db) / PG_USER / PG_DB / PG_SCHEMA(기본 dev)
# =============================================================================
set -euo pipefail

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

# .env 에서 기본 접속 정보 로드(있으면). 없으면 컨테이너 기본값 사용.
if [ -f .env ]; then
  set -a
  # shellcheck disable=SC1091
  . ./.env
  set +a
fi

CONTAINER="${DB_CONTAINER:-bibimbap-db}"
PGUSER_="${PG_USER:-${POSTGRES_USER:-bibimbap}}"
PGDB_="${PG_DB:-${POSTGRES_DB:-bibimbap}}"
SCHEMA="${PG_SCHEMA:-${APP_SCHEMA:-dev}}"

# 적용 대상: 인자가 있으면 그 파일들, 없으면 docs/*-ddl.sql 전체.
if [ "$#" -gt 0 ]; then
  files=("$@")
else
  files=(docs/*-ddl.sql)
fi

# 컨테이너 가동 확인.
if ! docker ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then
  echo "✗ DB 컨테이너 '$CONTAINER' 가 떠 있지 않다. 먼저: docker compose up -d db" >&2
  exit 1
fi

echo "▶ 대상  컨테이너=$CONTAINER  db=$PGDB_  schema=$SCHEMA"
for f in "${files[@]}"; do
  if [ ! -f "$f" ]; then
    echo "✗ 파일 없음: $f" >&2
    exit 1
  fi
  echo "▶ 적용: $f"
  # docs/*-ddl.sql 은 unqualified 테이블명을 쓰므로 search_path 로 스키마를 강제한다.
  docker exec -e PGOPTIONS="-c search_path=$SCHEMA" -i "$CONTAINER" \
    psql -U "$PGUSER_" -d "$PGDB_" -v ON_ERROR_STOP=1 -f - < "$f"
done
echo "✓ 완료 — docs/*-ddl.sql → '$SCHEMA' 스키마 적용됨"
