#!/bin/bash

LOG=/var/log/$(basename $0).log
:> $LOG

cleanup() {
    systemctl enable dm-script-harakiri.service                      2>> $LOG
    rm -f /home/*/.config/dolphinrc                                  2>> $LOG
    rm -f /home/*/.config/kdeglobals                                 2>> $LOG
    rm -f /home/*/.config/kwinrc                                     2>> $LOG
    rm -f /home/*/.config/ksmserverrc                                2>> $LOG
    rm -f /home/*/.config/kxkbrc                                     2>> $LOG
    rm -f /home/*/.config/kiorc                                      2>> $LOG
    rm -f /home/*/.config/systemsettingsrc                           2>> $LOG
    rm -f /home/*/.config/plasma-org.kde.plasma.desktop-appletsrc    2>> $LOG
    rm -f /home/*/.config/plasmarc                                   2>> $LOG
    rm -f /home/*/.local/share/kxmlgui5/dolphin/dolphinui.rc        2>> $LOG
    rm -rf /home/*/.cache/*                                          2>> $LOG
    dnf remove gdm-default-to-xorg --assumeyes                       2>> $LOG
    rpm -e --nodeps update-kde5-to-kde6                              2>> $LOG
    sync
    msg "The upgrade to KDE 6 completed successfully!" "Обновление до KDE 6 завершено успешно!"
    msg "Press ENTER to reboot, ctrl-c to continue with dm-scripts session" \
        "Нажмите ENTER для перезагрузки или ctrl-c чтобы продолжить сессию dm-scripts"
    read qqq
    reboot || reboot -f
}

trap '[ $? == 0 ] && cleanup' EXIT

echo_exit() {
    msg "$1"
    exit $2
}

msg() {
    echo "$1" >> "$LOG"
    [ "$2" ] && [ $lang == 'ru' ] && { echo "$2" 1>&2; return ; }
    echo "$1" 1>&2
}

lang='en'
echo "${LANG}${LANGUAGE}${LC_MESSAGES}" |grep "ru_" && lang='ru'

echo "========================================================================"
if [ $lang == "ru" ] ; then
    echo "Этот скрипт выполнит обновление kde plasma5 до kde plasma6."
    echo "Внимание! Для более плавного обновления плазмы будут очищены пользовательские кэши."
    echo "Перед обновлением рекомендуется сделать резервное копирование пользовательских данных."

else
    echo "This script will update plasma5 to plasma6"
    echo "Notice: User caches will be cleared for a smoother update of plasma."
    echo "Before updating, it is recommended to backup your user data."
fi
echo "======================================================================"

sleep 1 # need to correct order of startup messages in tmux
msg "Press ENTER to continue, ctrl-c to abort" "Нажите ENTER для продолжения или ctrl-c чтобы прервать скрипт"
read qqq

USER_PKGS_BEFORE=$(dnf -q repoquery --userinstalled --qf '%{name}')

dnf clean all 2>> $LOG
dnf install task-iso-plasma5-conflicts --allowerasing --assumeyes || echo_exit "Task-iso-plasma5-conflicts installation: failed." ${LINENO}
dnf remove  task-iso-plasma5-conflicts --assumeyes                || echo_exit "Task-iso-plasma5-conflicts removal: failed." ${LINENO}
dnf install task-iso-plasma6 --allowerasing --assumeyes           || echo_exit "Task-iso-plasma6 installation: failed." ${LINENO}
dnf dsync --allowerasing --assumeyes 2>> $LOG                     || : # returns non zero if nothing to sync

AVAILABLE_PKGS=$(dnf -q repoquery --qf '%{name}' 2>> $LOG )
USER_PKGS_AFTER=$(dnf -q repoquery --userinstalled --qf '%{name}' 2>> $LOG )
REMOVED_USER_PKGS=$(
    comm -23  \
        <(sort <<< "$USER_PKGS_BEFORE") \
        <(sort <<< "$USER_PKGS_AFTER" ) 2>> $LOG
)

USER_PKGS_TO_RESTORE=''
while read -r pkg; do
    [ -z "$pkg" ] && continue
    if grep -qFx "plasma6-${pkg}" <<< "$AVAILABLE_PKGS"; then
        USER_PKGS_TO_RESTORE+=" plasma6-${pkg}"
    fi
done <<< "$REMOVED_USER_PKGS"

echo "Removed user's packages:"        >> $LOG
echo -e "${REMOVED_USER_PKGS}\n"       >> $LOG

echo "Available packages to restore:"  >> $LOG
echo -e "${USER_PKGS_TO_RESTORE}\n"    >> $LOG

if [ -n "$USER_PKGS_TO_RESTORE" ]; then
    #shellcheck disable=2086
    dnf install $USER_PKGS_TO_RESTORE --assumeyes || echo_exit "Restore user packages: failed" 0
fi

exit 0



