# old version (without -$pkgrel): ${1%%-*}
# new version (without -$pkgrel): ${2%%-*}

PKGNAME="vipnetclient-gui"

msg() {
    ALL_OFF="\e[1;0m"
    BOLD="\e[1;1m"
    GREEN="${BOLD}\e[1;32m"
    local mesg=$1; shift
    printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}

# arg 1:  the new package version
pre_install() {
    pre_upgrade $@
}

# arg 1:  the new package version
post_install() {
    post_upgrade $@
}

# arg 1:  the new package version
# arg 2:  the old package version
pre_upgrade() {
    true
}

# arg 1:  the new package version
# arg 2:  the old package version
post_upgrade() {
    reload() {
	UPGRADE_DIR="/tmp/vipnetclient"
	printf "Reloading running processes "
	rm -rf ${UPGRADE_DIR}
	mkdir -p ${UPGRADE_DIR}
	# Creating file-markers on each existing vipnetclient process and send them USR1
	for pid in $(pgrep -U0 -x vipnetclient); do
    	    local user=$(grep -awz USER /proc/${pid}/environ 2>/dev/null | tr -d '\0' | cut -c 6-)
    	    [ -z "$user" ] && continue
    	    echo ${pid} >${UPGRADE_DIR}/${user}
	done
        pkill -x --signal USR1 vipnetclient 2>/dev/null
	# wait for every marker to be deleted by a reloaded process
	for i in $(seq 60); do
    	    printf "."
    	    [ -z "$(ls -A ${UPGRADE_DIR} 2>/dev/null)" ] && break
    	    for f in ${UPGRADE_DIR}/*; do
        	ls /proc | grep -w "$(cat $f >/dev/null 2>&1)" || rm -f $f
    	    done
    	    sleep 1
	done
	if [ -z "$(ls -A ${UPGRADE_DIR} 2>/dev/null)" ]; then
    	    printf " success\n"
	else
    	    printf " some processes are not reloaded\n"
	fi
	rm -rf ${UPGRADE_DIR} # not sure about it
    }
    #update man db
    mandb >/dev/null 2>&1
    #check OS
    #    OS_RELEASE="$( grep -Po "^ID=\K\w+" /etc/os-release 2>/dev/null )-$( grep -Pom1 "^(VERSION|RELEASE).*=\"?\K[\w\.\,\-]+" /etc/os-release 2>/dev/null )"
    #    [ echo "$OS_RELEASE" | grep -q "astra" ] perl -pi -e "s/Icon=VipnetClient/Icon=/var/lib/vipnet/icons/VipnetClient_48x48.png/g" "/usr/share/applications/ViPNet.desktop"
    # update icon cache
    [ -x "$(which gtk-update-icon-cache)" ] && gtk-update-icon-cache -f -t /usr/share/icons/hicolor >/dev/null 2>&1
    # update MIME types
    [ -x "$(which update-mime-database)" ] && update-mime-database /usr/share/mime >/dev/null 2>&1
    [ -x "$(which update-desktop-database)" ] && update-desktop-database /usr/share/applications >/dev/null 2>&1
    # Restart each running instance of vipnetclient-gui
    pkill -f -USR1 vipnetclient-gui-bin 2>/dev/null
    # Update shared libraries paths
    which ldconfig >/dev/null 2>&1 && ldconfig 2>/dev/null
    #create service and init scripts
    if which systemctl >/dev/null 2>&1; then
        systemctl enable vipnetclient >/dev/null 2>&1
    elif which update-rc.d >/dev/null 2>&1; then
        update-rc.d vipnetclient defaults 90 10 >/dev/null 2>&1
    fi
    # Set capability
    /usr/bin/vipnetclient --setcap --version
    # Reload and wait all running vipnetclient processes
    reload
}

# arg 1:  the old package version
pre_remove() {
    CORE_NAME=vipnetclient
    GUI_NAME=vipnetclient-gui-bin
    msg "Stopping ${CORE_NAME} "
    pkill -f --signal INT ${GUI_NAME} 2>/dev/null
    pkill -x --signal INT ${CORE_NAME} 2>/dev/null
    for i in $(seq 60); do
        printf "."
        sleep 1
        if pgrep -f "${GUI_NAME}" >/dev/null 2>&1 || pgrep -f "${CORE_NAME}\s+--no-background" >/dev/null 2>&1; then
            continue
        fi
        msg " done"
        return 0
    done
    # Kill'em all
    pkill -f --signal KILL ${GUI_NAME} 2>/dev/null
    pkill -x --signal KILL ${CORE_NAME} 2>/dev/null
    msg " done"
    return 0
}

# arg 1:  the old package version
post_remove() {
    # update icon cache
    [ -x "$(which gtk-update-icon-cache)" ] && gtk-update-icon-cache -f -t /usr/share/icons/hicolor >/dev/null 2>&1
    # update MIME types
    [ -x "$(which update-mime-database)" ] && update-mime-database /usr/share/mime >/dev/null 2>&1
    [ -x "$(which update-desktop-database)" ] && update-desktop-database /usr/share/applications >/dev/null 2>&1
    #update man db
    mandb >/dev/null 2>&1
    # Update shared libraries paths
    which ldconfig >/dev/null 2>&1 && ldconfig 2>/dev/null
    echo "Removing vipnetclient from autostart (if any)"
    # find from busybox doesn't know regexp
    find /root /home/* -maxdepth 1 -mindepth 1 \( \
        -name .bash_login -o \
        -name .bash_profile -o \
        -name .login -o \
        -name .zshrc -o \
        -name .profile -o \
        -name .xsessionrc \
        \) -exec /bin/sh -c 'echo "$(sed '/vipnetclient/d' "$0")" > "$0"' "{}" \; &>/dev/null
    # disable service and remove init scripts
    if which systemctl >/dev/null 2>&1; then
        systemctl disable vipnetclient >/dev/null 2>&1
    elif which update-rc.d >/dev/null 2>&1; then
        update-rc.d -f vipnetclient remove >/dev/null 2>&1
    fi
    rm -f /etc/rc*/*vipnetclient >/dev/null 2>&1
    true
}
