#!/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

cartridge_type="mysql-5.1"
setup_basic_vars
CART_INFO_DIR=$CARTRIDGE_BASE_PATH/embedded/$cartridge_type/info
CART_ETC_DIR=$CART_INFO_DIR/configuration/etc
source ${CART_INFO_DIR}/lib/util

MYSQL_DIR="$APP_HOME/$cartridge_type"

observe_setup_var_lib_dir "$MYSQL_DIR"

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

MYSQL_PORT=3306
MYSQL_IP=`find_open_ip $uid $uuid $MYSQL_PORT`

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

#
# Source database connection variables
#
if [ -d $MYSQL_DIR/.env ]; then
    . $MYSQL_DIR/.env/OPENSHIFT_MYSQL_DB_PORT
    . $MYSQL_DIR/.env/OPENSHIFT_MYSQL_DB_HOST
    . $MYSQL_DIR/.env/OPENSHIFT_MYSQL_DB_PASSWORD
    . $MYSQL_DIR/.env/OPENSHIFT_MYSQL_DB_USERNAME
    rm -rf $MYSQL_DIR/.env
else
    . $APP_HOME/.env/OPENSHIFT_MYSQL_DB_PORT
    . $APP_HOME/.env/OPENSHIFT_MYSQL_DB_HOST
    . $APP_HOME/.env/OPENSHIFT_MYSQL_DB_PASSWORD
    . $APP_HOME/.env/OPENSHIFT_MYSQL_DB_USERNAME
fi

#
# Setup Environment Variables
#
echo "export OPENSHIFT_MYSQL_DB_USERNAME='$OPENSHIFT_MYSQL_DB_USERNAME'" > $APP_HOME/.env/OPENSHIFT_MYSQL_DB_USERNAME
echo "export OPENSHIFT_MYSQL_DB_PASSWORD='$OPENSHIFT_MYSQL_DB_PASSWORD'" > $APP_HOME/.env/OPENSHIFT_MYSQL_DB_PASSWORD
echo "export OPENSHIFT_MYSQL_DB_HOST='$MYSQL_IP'" > $APP_HOME/.env/OPENSHIFT_MYSQL_DB_HOST
echo "export OPENSHIFT_MYSQL_DB_PORT='$MYSQL_PORT'" > $APP_HOME/.env/OPENSHIFT_MYSQL_DB_PORT
echo "export OPENSHIFT_MYSQL_DB_SOCKET='${MYSQL_DIR}/socket/mysql.sock'" > $APP_HOME/.env/OPENSHIFT_MYSQL_DB_SOCKET
echo "export OPENSHIFT_MYSQL_DB_URL='mysql://$OPENSHIFT_MYSQL_DB_USERNAME:$OPENSHIFT_MYSQL_DB_PASSWORD@$MYSQL_IP:$MYSQL_PORT/'" > $APP_HOME/.env/OPENSHIFT_MYSQL_DB_URL

ORIG_DB_HOST=$OPENSHIFT_MYSQL_DB_HOST

if [ "$ORIG_DB_HOST" != "$MYSQL_IP" ]
then
    sed -i "s,$ORIG_DB_HOST,$MYSQL_IP," $MYSQL_DIR/etc/my.cnf
    sed -i "s,$old_uuid,$uuid," $MYSQL_DIR/etc/my.cnf

    start_database

    echo "
UPDATE user SET Host='$MYSQL_IP' WHERE Host='$ORIG_DB_HOST';
flush privileges;" | mysql -u $OPENSHIFT_MYSQL_DB_USERNAME -P $OPENSHIFT_MYSQL_DB_PORT -h $MYSQL_IP --password="$OPENSHIFT_MYSQL_DB_PASSWORD" -S "${MYSQL_DIR}/socket/mysql.sock" mysql > /dev/null || error "Failed to setup root user with new ip" 187

    stop_database

    set_app_info "Connection URL: mysql://$MYSQL_IP:$OPENSHIFT_MYSQL_DB_PORT/"
fi
