#!/usr/bin/env bash

ENABLED=yes
[[ ${ENABLED} != yes ]] && exit 0

. /usr/lib/ublinux/functions
. /usr/lib/ublinux/default

SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

# ARG1: AUTOEXEC[user-1,@wheel]="xbindkeys;kde:yakuake;gnome:guake;xfce:plank.desktop,xterm;lxde:guake"
exec_autoexec_set(){
    local PARAM="$@"
    if [[ -n ${PARAM} ]]; then
        local AUTOEXEC=
        declare -A AUTOEXEC=()
        [[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
    fi
    [[ -n ${AUTOEXEC[@]} ]] || return
    CURRENT_DE=$(detectDE)
    for ITEM_UNIT in "${!AUTOEXEC[@]}"; do
	local IS_EXEC=
	while read USER_GROUP; do
	    if [[ ${USER_GROUP} == 0 ]] \
	    || ( [[ ${USER_GROUP} =~ ^"@" ]] && getent group "${USER_GROUP//@/}" | grep -q "\b${USER}\b" ) \
	    || getent passwd "${USER_GROUP}" | grep -q ^"\b${USER}\b"; then
		IS_EXEC=yes
	    fi
	done < <(echo "${ITEM_UNIT}" | tr ',; ' \\n)
	if [[ -n ${IS_EXEC} ]]; then
	    while read DE_CMD; do
		FIND_DE=${DE_CMD%%:*}
	        FIND_CMD=${DE_CMD#*:}
	        [[ ${FIND_DE} != ${FIND_CMD} && ${FIND_DE} != ${CURRENT_DE} ]] && continue
	        [[ -z ${FIND_CMD} ]] || while read EXEC_CMD; do
	            cd ${HOME}
	    	    if [[ ${EXEC_CMD} =~ ".desktop"$ ]]; then
	    		bash -c "$(grep '^Exec' $(find /usr/share/applications ~/local/share/applications -iname ${EXEC_CMD} 2>/dev/null | tail -1) | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')" &
	    		#echo "bash -c $(grep '^Exec' $(find /usr/share/applications ~/local/share/applications -iname ${EXEC_CMD} 2>/dev/null | tail -1) | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g') &"
	    	    else
	    		bash -c "${FIND_CMD}" &
	    		#echo "bash -c ${EXEC_CMD} &"
	    	    fi
	    	done <  <(echo "${FIND_CMD}" | tr ',' \\n)
	    done < <(echo "${AUTOEXEC[${ITEM_UNIT}]}" | tr ';' \\n)
	fi
    done
}

# ARG1: AUTOEXEC[superadmin]=
exec_autoexec_remove(){
    PARAM="$@"
    [[ -n ${PARAM} ]] && ITEM_UNIT=${PARAM#*[} && ITEM_UNIT=${ITEM_UNIT%%]*} || return 0
    [[ -n ${ITEM_UNIT} ]] || return 0
}

################
##### MAIN #####
################

    if [[ -z $@ || $1 == @("set="|"set+="|"set++=") ]]; then
	shift
	exec_autoexec_set $@
	KERNEL_AUTOEXEC="$(cmdline_value autoexec)"
	[[ -n ${KERNEL_AUTOEXEC} ]] && exec_autoexec_set AUTOEXEC="${KERNEL_AUTOEXEC}"
    elif [[ $1 == @("set-="|"set--="|"remove") ]]; then
	shift
	exec_autoexec_remove $@
    fi

