#!/bin/bash
SOURCE="$0"
source /usr/lib/elive-tools/functions
EL_REPORTS="1"
el_make_environment
# . gettext.sh
# TEXTDOMAIN=""
# export TEXTDOMAIN

#set -x

main(){
    tmp_lock="/tmp/.$( basename ${SOURCE} )-${USER}-killing.lock"
    # run
    if [ -x "/usr/bin/ulauncher" ] ; then
        ( ulauncher & )
        el_config_get
        # because of a bug, ulauncher needs to be run a first time in order to run correctly
        if ! ((conf_first_run)) ; then
            sleep 2
            killall ulauncher 1>/dev/null 2>&1 || killall -9 ulauncher 1>/dev/null 2>&1
            ( ulauncher & )
            conf_first_run=1
            el_config_save "conf_first_run"
        fi
        sleep 1
        is_launcher_used=1
    else
        # use kupfer instead
        if [ -x "/usr/bin/kupfer" ] ; then
            #if pidof -q kupfer ; then
                #if [ "$1" = "force" ] ; then
                    ( kupfer & )
                #else
                    ## do not do anything because is already running, so the trigger will automatically open it
                    #true
                #fi
            #fi
            is_launcher_used=1
        fi
    fi

    if [ -z "$is_launcher_used" ] ; then
        #echo -E "Please install first a launcher, like 'ulauncher' or 'kupfer'" 1>&2
        notify-send -e -t 10000 -i error "Dependencies missing" "Please install first a launcher,\nlike 'ulauncher' or 'kupfer'"
        exit 1
    fi

    if LC_ALL=C grep -Fqs "boot=live" /proc/cmdline ; then
        is_live=1
    fi


    #
    # free some ram
    #
    sleep 5
    ram_used="$( free -m | LC_ALL=C grep "^Mem: " | awk '{print $3}' )"
    ram_total="$( free -m | LC_ALL=C grep "^Mem: " | awk '{print $2}' )"
    ram_used_percent="$( echo "( $ram_used / $ram_total ) * 100" | bc -l | sed -e 's|\..*$||g' )"


    if [ "$ram_used_percent" -gt 85 ] ; then
        sleep 30
        killall kupfer ulauncher 1>/dev/null 2>&1 || killall -9 kupfer ulauncher 1>/dev/null 2>&1
        is_killed=1
        rm -f "$tmp_lock"
    else
        if [ "$ram_used_percent" -gt 80 ] ; then
            if [ -n "$is_live" ] ; then time_wait="1m" ; else time_wait="5m" ; fi
        else
            if [ "$ram_used_percent" -gt 70 ] ; then
                if [ -n "$is_live" ] ; then time_wait="2m" ; else time_wait="10m" ; fi
            else
                if [ "$ram_used_percent" -gt 60 ] ; then
                    if [ -n "$is_live" ] ; then time_wait="2m" ; else time_wait="20m" ; fi
                else
                    if [ "$ram_used_percent" -gt 50 ] ; then
                        if [ -n "$is_live" ] ; then time_wait="3m" ; else time_wait="30m" ; fi
                    else
                        # ram amount based values:
                        if [ "$ram_total" -lt 3000 ] ; then
                            # less than 3gb of ram
                            if [ -n "$is_live" ] ; then time_wait="5m" ; else time_wait="30m" ; fi
                        else
                            if [ "$ram_total" -lt 6000 ] ; then
                                if [ -n "$is_live" ] ; then time_wait="10m" ; else time_wait="65m" ; fi
                            else
                                if [ "$ram_total" -lt 9000 ] ; then
                                    if [ -n "$is_live" ] ; then time_wait="20m" ; else time_wait="2h" ; fi
                                else
                                    # NOTE: keeping the launcher running is needed for the "timer" extension to run, so allow it it on machines that has enough ram to not be annoyed
                                    unset time_wait
                                fi
                            fi
                        fi
                    fi
                fi
            fi
        fi
    fi


    # keep system light if not used for a while
    if [ -n "$is_killed" ] ; then
        exit 0
    else
        if ! [ -e "$tmp_lock" ] ; then
            if [ -n "$time_wait" ] ; then
                (
                    [[ "$EL_DEBUG" -gt 2 ]] && echo -e "killing kupfer and ulauncher in '$time_wait' ..." 1>&2 ;
                    sleep $time_wait ;
                    killall kupfer ulauncher 1>/dev/null 2>&1 || killall -9 kupfer ulauncher 1>/dev/null 2>&1 ;
                    rm -f "$tmp_lock"
                ) &

                # set the flag
                echo $$ > "$tmp_lock"
            else
                rm -f "$tmp_lock"
            fi
        fi
    fi

}

#
#  MAIN
#
main "$@"

# vim: set foldmethod=marker :
