#!/bin/sh

CONFIG_TOP_SRC_DIR=`pwd`
KAROO_HOST_IP_GUESSED=`ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -n 1`
REDIS_PORT=6380
MONIT_HTTPPORT=6382
MONIT_PASSWORD=monit

#
# Check if KAROO_SETUP_HOST environment variable is set
#

if [ -z "$KAROO_SETUP_HOST" ]; then
    KAROO_HOST_IP=${KAROO_HOST_IP_GUESSED}
else
    KAROO_HOST_IP=${KAROO_SETUP_HOST}
fi  




prepare_build_root()
{
    cd ${CONFIG_TOP_SRC_DIR}
    rm -rf ${CONFIG_BUILDROOT}
    mkdir -p ${CONFIG_BUILDROOT}

    #
    # PATHS CFG
    #
    sed -e "s:%KAROO_CONFIG_DIRECTORY%:${CONFIG_INSTALLROOT}/etc/karoo.conf.d:g" \
                            etc/config/paths.cfg.in > etc/config/paths.cfg
    #
    #SCRIPTS CFG
    #
    sed -e "s:%KAROO_CONFIG_DIRECTORY%:${CONFIG_INSTALLROOT}/etc/karoo.conf.d:g" \
                            etc/config/scripts.cfg.in > etc/config/scripts.cfg
    #
    # SIP CFG
    #
    cp etc/config/sip.cfg.in etc/config/sip.cfg
    #
    # SAHARA
    #
    sed -e "s:%KAROO_CONFIG_DIRECTORY%:${CONFIG_INSTALLROOT}/etc/karoo.conf.d:g" \
                    etc/config/sahara.cfg.in > etc/config/sahara.cfg
    sed -i "s:%KAROO_PID_FILE%:${CONFIG_INSTALLROOT}/var/run/karoo/karoo.pid:g" \
                    etc/config/sahara.cfg
    sed -i "s:%KAROO_BINARY_PATH%:${CONFIG_INSTALLROOT}/usr/bin:g" \
                    etc/config/sahara.cfg
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" \
                    etc/config/sahara.cfg
    rm -f etc/config/sahara.cfg.in.*


    mkdir -p ${CONFIG_BUILDROOT}/etc/karoo.conf.d/config
    mkdir -p ${CONFIG_BUILDROOT}/etc/init.d
    mkdir -p ${CONFIG_BUILDROOT}/etc/karoo.conf.d/states/dialog-state
    mkdir -p ${CONFIG_BUILDROOT}/etc/karoo.conf.d/states/reg-records
    mkdir -p ${CONFIG_BUILDROOT}/etc/karoo.conf.d/states/rtp-state
    mkdir -p ${CONFIG_BUILDROOT}/etc/karoo.conf.d/scripts
    mkdir -p ${CONFIG_BUILDROOT}/bin
    cp --no-dereference etc/config/*.cfg ${CONFIG_BUILDROOT}/etc/karoo.conf.d/config
    cp --no-dereference etc/config/*.conf ${CONFIG_BUILDROOT}/etc/karoo.conf.d/config
    cp --no-dereference etc/config/*.xml ${CONFIG_BUILDROOT}/etc/karoo.conf.d/config
    cp --no-dereference etc/karoo.properties ${CONFIG_BUILDROOT}/etc/karoo.conf.d/
    cp --no-dereference ucarp/ucarp* ${CONFIG_BUILDROOT}/etc/karoo.conf.d/
    cp --no-dereference -rf etc/monit ${CONFIG_BUILDROOT}/etc/karoo.conf.d/
    cp --no-dereference -rf etc/init ${CONFIG_BUILDROOT}/etc/karoo.conf.d/
    cp --no-dereference -rf bin/* ${CONFIG_BUILDROOT}/bin
    #cp --no-dereference etc/*.sh ${CONFIG_BUILDROOT}/etc/karoo.conf.d/

    cp --no-dereference etc/init/karood ${CONFIG_BUILDROOT}/etc/init.d/karood
    
    cp --no-dereference etc/init/pid_from_path.pl ${CONFIG_BUILDROOT}/etc/init.d/pid_from_path.pl
    cp -rf etc/flexi_route/* ${CONFIG_BUILDROOT}/etc/karoo.conf.d/scripts/
    rm -f etc/config/*.cfg

    #
    # SYMLINKS
    #
    cd ${CONFIG_BUILDROOT}/etc/karoo.conf.d/ ;	ln -snf ./scripts/route.js.detail ./routes
}

sed_monit()
{
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
    sed -i "s:%MONIT_HTTPPORT%:${MONIT_HTTPPORT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
    sed -i "s:%MONIT_PASSWORD%:${MONIT_PASSWORD}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
    sed -i "s:%KAROO_HOST_IP%:${KAROO_HOST_IP}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
    sed -i "s:%REDIS_PORT%:${REDIS_PORT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/karoo_heartbeat.sh
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/sahara_heartbeat.sh
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/redis_heartbeat.sh
    sed -i "s:%KAROO_FS_SIP_PORT%:${KAROO_FS_SIP_PORT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
    sed -i "s:%OPT_PREFIX%:${OPT_PREFIX}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc
}

reset_configuration()
{
   #
    # Create directories
    #
    mkdir -p ${CONFIG_INSTALLROOT}/var/log/karoo
    mkdir -p ${CONFIG_INSTALLROOT}/var/run/karoo
    mkdir -p ${CONFIG_INSTALLROOT}/var/run/karoo/tmp
    mkdir -p ${CONFIG_INSTALLROOT}/etc/karoo.conf.d
    mkdir -p ${CONFIG_INSTALLROOT}/etc/init.d

    #
    # Copy the files
    #
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/etc/karoo.conf.d/* ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/etc/init.d/karood ${CONFIG_INSTALLROOT}/etc/init.d/karood
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/etc/init.d/pid_from_path.pl ${CONFIG_INSTALLROOT}/usr/bin/pid_from_path.pl
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/bin/* ${CONFIG_INSTALLROOT}/usr/bin/

    #
    # Finalize
    #

    #
    # Init script (karood)
    #
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/init.d/karood
    sed -i "s:%OPT_PREFIX%:${OPT_PREFIX}:g" ${CONFIG_INSTALLROOT}/etc/init.d/karood

    #
    # Main configuration file (sip.cfg)
    #
    sed -i "s:%KAROO_HOST_IP%:${KAROO_HOST_IP}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/sip.cfg
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/sip.cfg

    #
    # Sahara
    #
    sed -i "s:%KAROO_HOST_IP%:${KAROO_HOST_IP}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/sahara.cfg
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/sahara.cfg

    #
    # Redis
    #
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/redis.conf
    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/redis.conf

    #
    # JavaScript
    #
    sed -i "s:%KAROO_HOST_IP%:${KAROO_HOST_IP}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/scripts/route.js.detail/route.js


    sed -i "s:%OPT_PREFIX%:${OPT_PREFIX}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/sahara.cfg
    sed -i "s:%REDIS_PORT%:${REDIS_PORT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/redis.conf
    sed -i "s:%REDIS_PORT%:${REDIS_PORT}:g" ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config/sip.cfg

    sed_monit
    

    chmod +x ${CONFIG_INSTALLROOT}/etc/init.d/karood
    chmod +x ${CONFIG_INSTALLROOT}/usr/bin/pid_from_path.pl
    chmod +x ${CONFIG_INSTALLROOT}/usr/bin/sbc-*
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/scripts/shell/*.sh
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/*.sh
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/*.sh
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/init/*
    chmod 0700 ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc

    echo "Configuration UPDATED"
}

update_configuration()
{
    #
    # Perform selective update
    #
    #
    # Init script (karood)
    #
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/etc/init.d/karood ${CONFIG_INSTALLROOT}/etc/init.d/karood
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/etc/init.d/pid_from_path.pl ${CONFIG_INSTALLROOT}/usr/bin/pid_from_path.pl
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/etc/karoo.conf.d/init/* ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/init/
    cp --no-dereference -rf ${CONFIG_BUILDROOT}/bin/* ${CONFIG_INSTALLROOT}/usr/bin/

    sed -i "s:%OSS_DEV_PREFIX%:${CONFIG_INSTALLROOT}:g" ${CONFIG_INSTALLROOT}/etc/init.d/karood
    sed -i "s:%OPT_PREFIX%:${OPT_PREFIX}:g" ${CONFIG_INSTALLROOT}/etc/init.d/karood
    chmod +x ${CONFIG_INSTALLROOT}/etc/init.d/karood
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/init/*
    echo "${CONFIG_INSTALLROOT}/etc/init.d/karood UPDATED"

    #
    # Monit
    #
    cp --no-dereference ${CONFIG_BUILDROOT}/etc/karoo.conf.d/monit/monitrc ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit
    sed_monit
    chmod 0700 ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc

    chmod +x ${CONFIG_INSTALLROOT}/etc/init.d/karood
    chmod +x ${CONFIG_INSTALLROOT}/usr/bin/pid_from_path.pl
    chmod +x ${CONFIG_INSTALLROOT}/usr/bin/sbc-*
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/scripts/shell/*.sh
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/*.sh
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/*.sh
    chmod +x ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/init/*
    chmod 0700 ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc

    echo "${CONFIG_INSTALLROOT}/etc/karoo.conf.d/monit/monitrc UPDATED"
}


cd ../../

if [ ! -d ./karoo.conf.d ]; then
    echo "Please run script within /etc/karoo.conf.d/data directory."
    exit -1
fi

cd ${CONFIG_TOP_SRC_DIR}

CONFIG_BUILDROOT=${CONFIG_TOP_SRC_DIR}/.oss_config_buildroot

if [ "x$1" = "xroot-install" ]; then
    CONFIG_INSTALLROOT=""
    OPT_PREFIX="/usr"
else
    cd ../../../
    CONFIG_INSTALLROOT=`pwd`
    OPT_PREFIX=${CONFIG_INSTALLROOT}
    if [ "x$CONFIG_INSTALLROOT" = "x/" ]; then
      CONFIG_INSTALLROOT=""
      OPT_PREFIX="/usr"
    fi
fi

if [ ! -d ${CONFIG_INSTALLROOT}/usr ]; then
    mkdir -p ${CONFIG_INSTALLROOT}/usr
    cd ${CONFIG_INSTALLROOT}/usr
    ln -snf ../bin ./
fi

prepare_build_root

if [ ! -d ${CONFIG_INSTALLROOT}/etc/karoo.conf.d/config ]; then
  RESET="yes"
else
  if [ "x$1" = "xreset" ]; then
    echo "Forcing configuration reset"
    RESET="yes"
  else
    RESET="no"
  fi
fi


if [ "${RESET}" = "yes" ]; then
   reset_configuration
else
   update_configuration
fi

#
# Clean up our mess
#
cd ${CONFIG_TOP_SRC_DIR}
rm -rf ${CONFIG_BUILDROOT}
