#!/bin/bash

# if wal-e backup is not enabled, use minimal wal-e logging to reduce disk space
export WAL_LEVEL=${WAL_LEVEL:-minimal}
export ARCHIVE_MODE=${ARCHIVE_MODE:-off}
export ARCHIVE_TIMEOUT=${ARCHIVE_TIMEOUT:-60}

function update_conf() {
  wal=$1
  # PGDATA is defined in upstream postgres dockerfile
  config_file=$PGDATA/postgresql.conf

  # Check if configuration file exists. If not, it probably means that database is not initialized yet
  if [ ! -f $config_file ]; then
    return
  fi
  # Reinitialize config
  sed -i "s/log_timezone =.*$//g" $PGDATA/postgresql.conf
  sed -i "s/timezone =.*$//g" $PGDATA/postgresql.conf
  sed -i "s/wal_level =.*$//g" $config_file
  sed -i "s/archive_mode =.*$//g" $config_file
  sed -i "s/archive_timeout =.*$//g" $config_file
  sed -i "s/archive_command =.*$//g" $config_file

  # Configure wal-e
  if [ "$wal" = true ]; then
    /docker-entrypoint-initdb.d/setup-wale.sh
  fi
  echo "log_timezone = $DEFAULT_TIMEZONE" >>$config_file
  echo "timezone = $DEFAULT_TIMEZONE" >>$config_file
}

if [ "${1:0:1}" = '-' ]; then
  set -- postgres "$@"
fi

if [ "$1" = 'postgres' ]; then
  # Check wal-e variables
  wal_enable=true
  VARS=(AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY WALE_S3_PREFIX AWS_REGION)
  for v in ${VARS[@]}; do
    if [ "${!v}" = "" ]; then
      echo "$v is required for Wal-E but not set. Skipping Wal-E setup."
      wal_enable=false
    fi
  done

  # Setup wal-e env variables
  if [ "$wal_enable" = true ]; then
    for v in ${VARS[@]}; do
      export $v="${!v}"
    done
    WAL_LEVEL=archive
    ARCHIVE_MODE=on
  fi

  # Update postgresql configuration
  update_conf $wal_enable

  # Run the postgresql entrypoint
  docker-entrypoint.sh postgres
fi
