#!/bin/sh

#
# This script creates config/environments/*.js files using
# config/environments/*.js.example files as input and performing
# settings substitutions.
#
# It relies on a known format of the .js.example files which haven't
# been made easier to parse to still let humans copy them manually and
# do further editing or leave them as such to get the same setup as before
# the introduction of this script.
#
# The script is a work in progress. Available switches are printed
# by invoking with the --help switch. More switches will be added
# as the need/request for them arises.
#
# --strk(2012-07-23)
#

ENVDIR=config/environments

PGPORT=
SQLAPI_PORT=
MAPNIK_VERSION=
ENVIRONMENT=development

STATUS="$0 $*"

usage() {
  echo "Usage: $0 [OPTION]"
  echo 
  echo "Configuration:"
  echo "  --help                        display this help and exit"
  echo "  --with-pgport=NUM             access PostgreSQL server on TCP port NUM [$PGPORT]"
  echo "  --with-sqlapi-port=NUM        access SQL-API server on TCP port NUM [$SQLAPI_PORT]"
  echo "  --with-mapnik-version=STRING  set mapnik version string [$MAPNIK_VERSION]"
  echo "  --environment=STRING          set output environment name [$ENVIRONMENT]"
}

while test -n "$1"; do
  case "$1" in
    --help|-h)
      usage
      exit 0
      ;;
    --with-pgport=*)
      PGPORT=`echo "$1" | cut -d= -f2`
      ;;
    --with-sqlapi-port=*)
      SQLAPI_PORT=`echo "$1" | cut -d= -f2`
      ;;
    --with-mapnik-version=*)
      MAPNIK_VERSION=`echo "$1" | cut -d= -f2`
      ;;
    --environment=*)
      ENVIRONMENT=`echo "$1" | cut -d= -f2`
      ;;
    *)
      echo "Unused option '$1'" >&2
      ;;
  esac
  shift
done

ENVEX=./${ENVDIR}/${ENVIRONMENT}.js.example

if [ -z "$PGPORT" ]; then
  PGPORT=`node -e "console.log(require('${ENVEX}').postgres.port)"`
fi
if [ -z "$SQLAPI_PORT" ]; then
  SQLAPI_PORT=`node -e "console.log(require('${ENVEX}').sqlapi.port)"`
fi

echo "PGPORT: $PGPORT"
echo "SQLAPI_PORT: $SQLAPI_PORT"
echo "MAPNIK_VERSION: $MAPNIK_VERSION"
echo "ENVIRONMENT: $ENVIRONMENT"

o=`dirname "${ENVEX}"`/`basename "${ENVEX}" .example`
echo "Writing $o"

# See http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/
sed -n "1h;1!H;\${;g;s/\(,postgres: {[^}]*port: *'\?\)[^',]*\('\?,\)/\1$PGPORT\2/;p;}" < "${ENVEX}" \
  | sed "s/mapnik_version:.*/mapnik_version: '$MAPNIK_VERSION'/" \
  | sed -n "1h;1!H;\${;g;s/\(,sqlapi: {[^}]*port: *'\?\)[^',]*\('\?,\)/\1$SQLAPI_PORT\2/;p;}" \
  > "$o"

STATUSFILE=config.status--${ENVIRONMENT}
echo "Writing ${STATUSFILE}"
echo ${STATUS} > ${STATUSFILE} && chmod +x ${STATUSFILE}

