#!/bin/bash

# Move to a new ip

# Exit on any errors
set -e

source "/etc/openshift/node.conf"
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/util
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/apache
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/network

while getopts 'd' OPTION
do
    case $OPTION in
        d) set -x
        ;;
        ?) print_help
        ;;
    esac
done

[ $# -eq 3 ] || print_help

namespace=`basename $2`
application="$1"
uuid=$3

CART_NAME="postgresql"
CART_VERSION="8.4"
cartridge_type="$CART_NAME-$CART_VERSION"

setup_basic_vars
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/util

CART_INSTANCE_DIR=$(get_cartridge_instance_dir "$cartridge_type")
CART_INFO_DIR=${CARTRIDGE_BASE_PATH}/embedded/$cartridge_type/info
CART_ETC_DIR=$CART_INFO_DIR/configuration/etc
source ${CART_INFO_DIR}/lib/util

observe_setup_var_lib_dir "$CART_INSTANCE_DIR"

# This gear is dedicated to running postgresql - configure it as such.
if only_cart_on_gear $cartridge_type; then
    prepare_gear_for_standalone_postgresql
fi

POSTGRESQL_PORT=5432
POSTGRESQL_IP=`find_open_ip $uid $uuid $POSTGRESQL_PORT`

#
# Fix permissions
#
observe_setup_app_home
old_uuid=$(stat -c %U $CART_INSTANCE_DIR/etc)
if [ ! "$old_uuid" == "$uuid" ]; then
    pushd "$CART_INSTANCE_DIR" > /dev/null
    chown -cR --from=$old_uuid.$old_uuid $uuid.$uuid * > /dev/null
    popd > /dev/null
fi

#
# Source database connection variables
#
if [ -d $CART_INSTANCE_DIR/.env ]; then
    . $CART_INSTANCE_DIR/.env/OPENSHIFT_POSTGRESQL_DB_PORT
    . $CART_INSTANCE_DIR/.env/OPENSHIFT_POSTGRESQL_DB_HOST
    . $CART_INSTANCE_DIR/.env/OPENSHIFT_POSTGRESQL_DB_PASSWORD
    . $CART_INSTANCE_DIR/.env/OPENSHIFT_POSTGRESQL_DB_USERNAME
    rm -rf $CART_INSTANCE_DIR/.env
else
    . $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_PORT
    . $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_HOST
    . $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_PASSWORD
    . $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_USERNAME
fi

#
# Setup Environment Variables
#
echo "export OPENSHIFT_POSTGRESQL_DB_USERNAME='$OPENSHIFT_POSTGRESQL_DB_USERNAME'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_USERNAME
echo "export OPENSHIFT_POSTGRESQL_DB_PASSWORD='$OPENSHIFT_POSTGRESQL_DB_PASSWORD'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_PASSWORD
echo "export OPENSHIFT_POSTGRESQL_DB_HOST='$POSTGRESQL_IP'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_HOST
echo "export OPENSHIFT_POSTGRESQL_DB_PORT='$POSTGRESQL_PORT'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_PORT
echo "export OPENSHIFT_POSTGRESQL_DB_SOCKET='${CART_INSTANCE_DIR}/socket/postgres.sock'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_SOCKET
echo "export OPENSHIFT_POSTGRESQL_DB_URL='postgresql://$OPENSHIFT_POSTGRESQL_DB_USERNAME:$OPENSHIFT_POSTGRESQL_DB_PASSWORD@$POSTGRESQL_IP:$POSTGRESQL_PORT/'" > $APP_HOME/.env/OPENSHIFT_POSTGRESQL_DB_URL

ORIG_DB_HOST=$OPENSHIFT_POSTGRESQL_DB_HOST

if [ "$ORIG_DB_HOST" != "$POSTGRESQL_IP" ]
then
    sed -i "s,$ORIG_DB_HOST,$POSTGRESQL_IP," $CART_INSTANCE_DIR/data/postgresql.conf
    sed -i "s,$old_uuid,$uuid," $CART_INSTANCE_DIR/data/postgresql.conf
    echo "$POSTGRESQL_IP:$OPENSHIFT_POSTGRESQL_DB_PORT:*:$OPENSHIFT_POSTGRESQL_DB_USERNAME:$OPENSHIFT_POSTGRESQL_DB_PASSWORD" > $APP_HOME/.pgpass
    set_app_info "Connection URL: postgresql://$POSTGRESQL_IP:$OPENSHIFT_POSTGRESQL_DB_PORT/"
fi
