#!/bin/bash

set -e

POSTGRES_VERSION=17-alpine
CONTAINER_NAME=songwhip-presaves-postgres
PORT=5432
POSTGRES_PASSWORD=postgres
POSTGRES_DB=songwhip_presaves
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 PRESAVES_DB_HOST=localhost
export PRESAVES_DB_PORT="$PORT"
export PRESAVES_DB_NAME=songwhip_presaves
export PRESAVES_DB_USER=postgres
export PRESAVES_DB_PASSWORD=$POSTGRES_PASSWORD
export PRESAVES_DB_SSL=false

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