#!/bin/bash
set -e # fail on error

PG_DUMP_DESTINATION=/tmp/production-database.sql

die () {
  echo 'provide target and destination database urls -- usage:'
  echo 'importdb.sh -t [Production database] -d [Local Database] -p [Local Database Port] -u [Local Database Username] [-w]'
  exit 1
}

while getopts "t:d:p:u:w" opt; do
  case $opt in
    t) PRODUCTION_DATABASE_URL=$OPTARG;;
    d) LOCAL_DATABASE=$OPTARG;;
    p) DB_PORT=$OPTARG;;
    u) LOCAL_USERNAME=$OPTARG;;
    w) WAIT=1;;
  esac
done

if [[ -z $PRODUCTION_DATABASE_URL ]]; then
  if [[ -n $ENV_FILE ]]; then
    source $ENV_FILE
    PRODUCTION_DATABASE_URL=$LOCAL_IMPORT_DATABASE_URL
  else
    die
  fi
fi

[ -z $LOCAL_DATABASE ] && LOCAL_DATABASE=$TARGET_DATABASE_URL

if [[ -z $DB_PORT || -z $LOCAL_DATABASE ]]; then
  die
fi

if [ -e $PG_DUMP_DESTINATION ]; then
  rm $PG_DUMP_DESTINATION
fi

dump () {
  pg_dump -Fc\
    --exclude-table-data=tracking_link_redirect_events \
    $PRODUCTION_DATABASE_URL > $PG_DUMP_DESTINATION
}

restore () {
  pg_restore \
    --verbose \
    --clean \
    --no-acl \
    --no-owner \
    -h localhost \
    -p ${DB_PORT} \
    -d $LOCAL_DATABASE < $PG_DUMP_DESTINATION
}

if [[ -n $WAIT ]]; then
  dump
  read -p "Database dump complete, press enter to restore to destination..."
  restore
else
  mkfifo $PG_DUMP_DESTINATION
  dump &
  restore
fi

rm $PG_DUMP_DESTINATION
echo "Production Database Imported!"
