#!/usr/bin/env bash

scriptpath="`readlink -f \"$0\"`"
scriptbase="`dirname \"${scriptpath}\"`"
REPOTYPE="$1"
CONFFILE="/opt/dosis2/etc/postgresql/9.2/custom-postgresql.conf"

. "${scriptbase}/migrate-tools"

enforce_root

tmpdir="`mktemp -d`"
function cleanup() {
    rm -rf "${tmpdir}"
}
trap cleanup EXIT

function verify_os() {
    os="`getos`"
    if [ "${os}" != "CentOS" ]; then
        abort 2 "Migration unsupported on: ${os}"
    fi
}

function upd_conf_setting() {
    val=`/opt/dosis2/bin/conf-edit "/var/lib/pgsql/9.2/data/postgresql.conf"  --filetype properties  --get .$1`
    if [ -z "${val}" ]; then 
        val="$2"
    else
        val=${val#*=}
    fi

    echo "Adjusting $1=${val}"
    /opt/dosis2/bin/conf-edit "${CONFFILE}" \
        --output "${CONFFILE}" \
        --filetype properties \
        --set .$1="${val}"
}

function stop_all_services() {
    service dosis_l60 stop
    service dosis_pmis stop
    service dosis_extprint stop
    service httpd stop
    service dosis_dbmonitor stop
    service dosis_pmis_sync stop
}

function save_file() {
    key="$1"
    filename="$2"

    if [ -f "${filename}" ]; then
        cp -vf "${filename}" "${tmpdir}/${key}"
    fi
}

function save_important_files() {
    save_file "dosis_pmis_sync.json" "/opt/dosis2/bin/dosis_pmis_sync/dosis_pmis_sync.json"
}

function remove_old_packages() {
    rpm -e dosis-base L60 dosis_os \
        dosis-mobile-dosis_notify \
        dosis_prep dosis_repo dosis_ctraq \
        mcontrol mcontrol-cli mcontrol-drivers-mdrive mcontrol-libs \
        stpc
}

function cleanup_post_package_removal() {
    rm -rf /opt/dosis2/bin/*
    rm -rf /opt/dosis2/lib/*
    rm -rf /opt/dosis2/pip/*
    rm -rf /opt/dosis2/rpm/*
    rm -rf /opt/dosis2/stpc
    rm -rf /opt/dosis2/tmp.out/*
}

function upgrade_system_from_prep() {
    "${scriptbase}/upgrade-from-prep"
    retval=$?

    if [ ${retval} != 0 ]; then
        abort ${retval} "failed to upgrade from prep"
    fi
}

function restore_file() {
    key="$1"
    dest="$2"

    if [ -f "${tmpdir}/${key}" ]; then
        cp -vf "${tmpdir}/${key}" "${dest}/."
    fi
}

function restore_important_files() {
    restore_file "dosis_pmis_sync.json" "/opt/dosis2/etc/pmissync"
}

function setup_postgres_custom() {
    if ! [ -f "${CONFFILE}" ]; then
        touch "${CONFFILE}"
    fi
    
    upd_conf_setting max_connections "100"
    upd_conf_setting shared_buffers "256MB"
    upd_conf_setting work_mem "24MB"
    upd_conf_setting effective_cache_size "512MB"
    upd_conf_setting maintenance_work_mem "32MB"
    upd_conf_setting checkpoint_segments "10"
}

verify_os
stop_all_services
save_important_files
remove_old_packages
cleanup_post_package_removal
upgrade_system_from_prep
restore_important_files
setup_postgres_custom

info "System Update Complete!"
answer=`prompt_yes_no "Reboot?"`
if [ "${answer}" = "yes" ]; then
    reboot
else
    warning "User said not to reboot"
fi
