#!/bin/bash

set -e

POSTGRES_VERSION=13.20-alpine
CONTAINER_NAME=songwhip-api-postgres
PORT=5432
POSTGRES_PASSWORD=postgres
POSTGRES_DB=songwhip_api
params=()

# parse args
while [ "$1" != "" ]; do
  PARAM=$(echo "$1" | awk -F= '{print $1}')
  VALUE=$(echo "$1" | awk -F= '{print $2}')

  case $PARAM in
    --use-volume)
      echo "using volume"
      mkdir -p ./docker/postgres/volume
      params+=(-v)
      params+=(${PWD}/.docker/postgres/volume:/var/lib/postgresql/data)
      ;;
    --name)
      echo "using name $VALUE"
      CONTAINER_NAME=$VALUE
      ;;
    --port)
      echo "using port $VALUE"
      PORT=$VALUE
      ;;
    *)
      echo "ERROR: unknown parameter \"$PARAM\""
      usage
      exit 1
      ;;
  esac
  shift
done

# Check if container with the given name is already running
if [ "$(docker ps -q -f name="$CONTAINER_NAME")" ]; then
  echo "container $CONTAINER_NAME is already running."
  exit 0
fi

echo "start container $CONTAINER_NAME"

docker run --rm \
  --name "$CONTAINER_NAME" \
  -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \
  -e POSTGRES_DB=$POSTGRES_DB \
  -p "$PORT":5432 \
  -d \
  "${params[@]}" \
  postgres:$POSTGRES_VERSION

# block exit until postgres is ready to accept connections
until docker run \
  --rm \
  --link "$CONTAINER_NAME":pg \
  postgres:$POSTGRES_VERSION pg_isready \
    -U postgres \
    -h pg; do sleep 1; done

echo "postgres running on localhost:$PORT"

echo ""
echo "creating database tables …"
echo ""

# export vars used by knexfile
export POSTGRES_HOST=localhost
export POSTGRES_PORT="$PORT"
export POSTGRES_DB=songwhip_api
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=$POSTGRES_PASSWORD
export POSTGRES_SSL=  # Disable SSL for local database

# run migrations on fresh database to create tables
pnpm db:migrate:schema:up
