#!/usr/bin/env bash
set -euo pipefail

MIGRATIONS_DIR="prisma/migrations"
SCHEMA_PATH="prisma/schema.prisma"

if [ -f .env.local ]; then
  while IFS= read -r line || [ -n "$line" ]; do
    case "$line" in
      ''|'#'*) continue ;;
    esac
    key=${line%%=*}
    value=${line#*=}
    if [ -z "${!key+x}" ]; then
      export "$key=$value"
    fi
  done < .env.local
fi

is_local_url() {
  printf '%s' "$1" | grep -Eq '@(localhost|127\.0\.0\.1|postgres|ballbox-postgres)(:|/)|//(localhost|127\.0\.0\.1|postgres|ballbox-postgres)(:|/)'
}

if [ ! -f prisma/migration_lock.toml ]; then
  echo "Missing prisma/migration_lock.toml"
  exit 1
fi

if [ ! -d "$MIGRATIONS_DIR" ]; then
  echo "Missing $MIGRATIONS_DIR"
  exit 1
fi

safe_db=0
if [ -n "${DATABASE_URL:-}" ] && { [ "${CI:-}" = "true" ] || [ "${ALLOW_REMOTE_PRISMA_COMMANDS:-}" = "1" ] || is_local_url "$DATABASE_URL"; }; then
  safe_db=1
fi

if [ "$safe_db" -eq 1 ]; then
  ./scripts/prisma-run-safe.sh migrate status
else
  echo "Skipping prisma migrate status: no safe local/CI DATABASE_URL configured."
fi

pnpm exec prisma validate --schema "$SCHEMA_PATH"
