#!/usr/bin/sh
log_info() {
    /bin/logger -p user.info -t suse_register "$@"
}

log_error() {
    /bin/logger -p user.err -t suse_register "$@"
}

log_debug() {
    /bin/logger -p user.debug -t suse_register "$@"
}

remove_cronjob() {
    log_info "Deleting migration cronjob."
    rm /etc/cron.d/suse.com-suse_register-migration-to-scc
}


AWK_PROGRAM=$(cat <<'EOF'
{
    gsub(/ /, "", $2);
    gsub(/nu_novell_com/, "scc_suse_com", $2);
    gsub(/ /, "", $4);
    gsub(/ /, "", $5);
    gsub(/ /, "", $6);
    $4 = ($4 == "Yes") ? "enabled" : "disabled";
    $5 = ($5 == "Yes") ? "refresh" : "no-refresh";
    print $2, $4, $5, $6
}
EOF
)
CONFIGFILE=/etc/suseRegister.conf
REPOFILE=/var/lib/suseRegister/pre-migration-zypper_repos.txt
SUCCESS_MARKER=/var/lib/suseRegister/SystemMigratedToSCC
OES_MARKER=/var/lib/suseRegister/OES-Detected
NCCDOMAIN="secure-www.novell.com/"
SCCDOMAIN="scc.suse.com/ncc/"
CONF_URLREGEX="^\s*url\s*=\s*https://"

if /usr/bin/zypper products --installed | grep Open_Enterprise_Server > /dev/null 2>&1; then
    log_info "OES installation detected. Cancelling migration to SCC."
    touch $OES_MARKER;
    remove_cronjob;
    exit 0;
fi

if ! grep 'result="success"' /var/lib/suseRegister/registration-status.xml && [ ! -e $REPOFILE ] > /dev/null 2>&1; then
    log_info "System is not registered yet. Cancelling migration to SCC."
    remove_cronjob;
    exit 0;
fi

# URL might be changed to scc.suse.com if the cronjob runs multiple times before it succeeds
if ! grep "$CONF_URLREGEX\($NCCDOMAIN\|$SCCDOMAIN\)" $CONFIGFILE > /dev/null 2>&1; then
    log_info "System appears to use SMT as registration server. Cancelling migration to SCC."
    remove_cronjob;
    exit 0;
fi

if  [ -e $SUCCESS_MARKER ]; then
    log_info "System was already migrated."
    remove_cronjob;
    exit 0;
fi

. /etc/profile.d/profile.sh
log_info "Performing one time migration to SUSE Customer Center"

export LANG=en_US
export LANGUAGE=en_US

[ -e $REPOFILE ] || zypper repos --priority | grep 'nu_novell_com:' | awk -F '|' "$AWK_PROGRAM" > $REPOFILE
log_debug "Saving pre-migration repository state in $REPOFILE."

ENABLED_REPOS="$(grep enabled $REPOFILE | cut -f 1 -d ' ')"
DISABLED_REPOS="$(grep disabled $REPOFILE | cut -f 1 -d ' ')"
REFRESH_ENABLED_REPOS="$(grep refresh $REPOFILE  | cut -f 1 -d ' ')"
REFRESH_DISABLED_REPOS="$(grep no-refresh $REPOFILE | cut -f 1 -d ' ')"

sed -i "s,\($CONF_URLREGEX\)$NCCDOMAIN,\1$SCCDOMAIN," $CONFIGFILE
log_debug "Changing URL from NCC to SCC in $CONFIGFILE."

log_debug "Running suse_register to reregister against SCC"

/usr/bin/suse_register --batch -L /root/.suse_register.log > /dev/null 2>&1
exitcode=$?
if [ $exitcode -ne 0 ]; then
    log_error "suse_register returned a non-zero exit code during migration. Please see /root/.suse_register.log for details."
    exit $exitcode;
fi

# Restore previous repo states
if [ "x$ENABLED_REPOS" != "x" ]; then
    log_debug ":: Enabling Repos ::"
    echo $ENABLED_REPOS | xargs zypper mr -e > /dev/null 2>&1
else
    log_debug ":: No repos to re-enable ::"
fi

if [ "x$DISABLED_REPOS" != "x" ]; then
    log_debug ":: Disabling Repos ::"
    echo $DISABLED_REPOS | xargs zypper mr -d > /dev/null 2>&1
else
    log_debug ":: No repos to re-disable ::"
fi

if [ "x$REFRESH_ENABLED_REPOS" != "x" ]; then
    log_debug ":: Enabling Autorefresh for Repos ::"
    echo $REFRESH_ENABLED_REPOS | xargs zypper mr --refresh > /dev/null 2>&1
else
    log_debug ":: Nothing to Enable Autorefresh ::"
fi

if [ "x$REFRESH_DISABLED_REPOS" != "x" ]; then
    log_debug ":: Disabling Autorefresh for Repos ::"
    echo $REFRESH_DISABLED_REPOS | xargs zypper mr --no-refresh > /dev/null 2>&1
else
    log_debug ":: Nothing to Disable Autorefresh ::"
fi

log_debug ":: Restoring Repo Priorities ::"
awk '{ print $4, $1}' $REPOFILE | xargs -n 2 zypper mr -p > /dev/null 2>&1

touch $SUCCESS_MARKER
log_info "Migration completed successfully."
remove_cronjob;
rm $REPOFILE

# TODO: ask about additional URLS in /etc/suseRegister.conf
