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

ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT_DIR"

LOCAL_DATABASE_URL_DEFAULT="postgresql://postgres:postgres@127.0.0.1:5432/ballbox_local?schema=public"

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

PROD_URL="${PROD_DATABASE_URL:-${BALLBOX_PRODUCTION_DATABASE_URL:-${DATABASE_URL:-}}}"
LOCAL_URL="${LOCAL_DATABASE_URL:-$LOCAL_DATABASE_URL_DEFAULT}"
TMP_DUMP="${TMPDIR:-/tmp}/ballbox-prod-clone.dump"

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 [ -z "$PROD_URL" ]; then
  echo "PROD_DATABASE_URL, BALLBOX_PRODUCTION_DATABASE_URL, or DATABASE_URL is required."
  exit 1
fi

if is_local_url "$PROD_URL"; then
  echo "Refused: production source URL cannot be local."
  exit 1
fi

if ! is_local_url "$LOCAL_URL"; then
  echo "Refused: LOCAL_DATABASE_URL must point to local Postgres."
  exit 1
fi

pnpm db:local:up >/dev/null

if [ "${CLONE_LOCAL_DB_CONFIRM:-}" != "1" ]; then
  echo "This will replace the local database contents at:"
  echo "  $LOCAL_URL"
  echo "using data cloned from production."
  echo "Rerun with CLONE_LOCAL_DB_CONFIRM=1 to continue."
  exit 1
fi

echo "Creating dump from production..."
pg_dump --format=custom --no-owner --no-privileges --file "$TMP_DUMP" "$PROD_URL"

echo "Recreating local public schema..."
PGPASSWORD=postgres psql "${LOCAL_URL%%\?*}" -U postgres <<'SQL'
DROP SCHEMA IF EXISTS public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
SQL

echo "Restoring dump into local Postgres..."
pg_restore --clean --if-exists --no-owner --no-privileges --dbname "$LOCAL_URL" "$TMP_DUMP"

echo "Running committed migrations on local clone..."
DATABASE_URL="$LOCAL_URL" ALLOW_REMOTE_PRISMA_COMMANDS=1 pnpm db:deploy
DATABASE_URL="$LOCAL_URL" pnpm db:generate

echo "Local DB clone from production completed."
