#!/usr/bin/env bash

scriptpath="`readlink -f \"$0\"`"
scriptbase="`dirname \"${scriptpath}\"`"
REPOTYPE="$1"

. "${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 patch_yum_conf() {
    if grep -q "ip_resolve=" "/etc/yum.conf"; then
        sed -i "s/ip_resolve=.*/ip_resolve=4/g" "/etc/yum.conf"
    else
        echo "ip_resolve=4" >> "/etc/yum.conf"
    fi

    sed -i "s/mirrorlist=https/mirrorlist=http/" /etc/yum.repos.d/epel.repo

    sed -i "s/baseurl=http:\/\/puias.math.ias.edu\/data\/puias\/computational\/\$releasever\/\$basearch/baseurl=http:\/\/mirror.math.princeton.edu\/pub\/springdale\/puias\/6.5\/x86_64\/os\/Springdale/" /etc/yum.repos.d/puias-computational.repo
    sed -i "s/#baseurl=/baseurl=/" /etc/yum.repos.d/puias-computational.repo
    sed -i "s/mirrorlist=/#mirrorlist=/" /etc/yum.repos.d/puias-computational.repo

    cp -f ${scriptbase}/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo

}

function cleanup_pre_migrate() {
    rm -f /etc/yum.repos.d/dosis-mirrors
    rm -f /etc/yum.repos.d/dosis-mirrors-testing
    rm -f /etc/yum.repos.d/Dosis.repo
    rm -f /etc/yum.repos.d/atrpms.repo
    rm -f /etc/yum.repos.d/nux-dextop.repo

    rpm -e pgdg-centos92-9.2-6.noarch
    rm -f /etc/yum.repos.d/pgdg*.repo
    yum -y install nss ca-certificates

    rpm -ivh --force "${scriptbase}/pgdg-centos92-9.2-8.noarch.rpm"
}

function install_requirements() {
    yum clean all
    yum clean expire-cache
    for i in `seq 1 3`; do
        yum install -y fping yum-plugin-downloadonly
        if [ $? = 0 ]; then
            return 0
        fi
    done
    abort 2 "Failed to install migrate requirements"
}

function fix_ius_git() {
    rpm -ivh "${scriptbase}/ius-release-el6.rpm"

    yum-config-manager --enable ius-archive

    for i in `seq 1 3`; do
        yum remove -y git
    done

    for i in `seq 1 3`; do
        yum install -y git gitk
    done
}

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

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

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 restore_important_files() {
    restore_file "dosis_pmis_sync.json" "/opt/dosis2/etc/pmissync"
}

function setup_system_repo() {
    repotype="$1"
    "${scriptbase}/setup-repo" "${repotype}"
    retval=$?
    
    if [ ${retval} != 0 ]; then
        abort ${retval} "Failed to setup repo as: ${repotype}"
    fi
}

function prep_system_for_upgrade() {
    "${scriptbase}/prep-for-upgrade"
    retval=$?

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

verify_os
patch_yum_conf
cleanup_pre_migrate
install_requirements
fix_ius_git
save_important_files
setup_system_repo "${REPOTYPE}"
prep_system_for_upgrade
restore_important_files