#!/bin/bash
#Appfinder Settings
#Tool to manage appfinder settings
#Version 2511-1
#License: GPL-3.0+

#Changelog 

#set up translation

source gettext.sh

export TEXTDOMAINDIR=/usr/share/locale 
export TEXTDOMAIN="mxfb-appfinder-settings"


#define some variables
appfinder_path="$HOME/.config/rofi/themes/appfinder/mxfb-appfinder.rasi"
appfinder_config_path="$HOME/.config/rofi/themes/appfinder/mxfb-appfinder-config.rasi"
target_path="$HOME/.config/rofi/themes/appfinder"


#######################################
####update check

if [ -f $HOME/.config/MX-Linux/appfinder-updatecheck.conf ]; then
    source $HOME/.config/MX-Linux/appfinder-updatecheck.conf
fi

checkdate=2505-1

if [ "$update_check" != "$checkdate" ]; then
    
    mkdir -p $HOME/.restore/rofi
    cp $appfinder_path $HOME/.restore/rofi/pre-"$checkdate"-mxfb-appfinder.rasi
    cp $appfinder_config_path $HOME/.restore/rofi/pre-"$checkdate"-mxfb-appfinder-config.rasi
   
   #update tabs   
   mx23_tabs="$(grep 'modi:' $appfinder_path)"
   
   if [ "$mx23_tabs" != 'modi: "drun,:/usr/bin/app-categories,help:/usr/share/rofi/rofi-help_appfinder,:/usr/bin/appfinder-exit";' ]; then
   
       mx25_tabs=$(echo ${mx23_tabs} | sed -e 's/\\:/\\:/' | sed -e  's/\"\;/\,\\:\/usr\/bin\/appfinder-exit\"\;/')
 
       mx23_tabs=$(echo "${mx23_tabs}" | sed -e 's/[]$\/*[\^]/\\&/g' )
       mx25_tabs=$(echo "${mx25_tabs}" | sed -e 's/[]$\/*[\^]/\\&/g' )
       sed -i "s/${mx23_tabs}/${mx25_tabs}/" $appfinder_path
   
       check_if_mx25=$(grep "appfinder-exit" $appfinder_path)
   
   #update display0.rasi
       sed -i "s/\/\/" $HOME/.config/rofi/themes/mxrm-settings/display0.rasi
   
   #update themes
       usrshare_path="/usr/share/mxflux/mx/etc/skel/.config/rofi/themes/appfinder"
   
       rasi_list=$(ls $usrshare_path/*.rasi)
       rasi_list=($rasi_list)
       for i in ${rasi_list[@]}; do
           rasi_theme=$(basename $i)
           if [ ! -f "$target_path/$rasi_theme" ]; then
               cp $i $target_path/$rasi_theme
           fi
       done
   
       printf "update_check=$checkdate\n" >> $HOME/.config/MX-Linux/appfinder-updatecheck.conf
   
   fi

fi

#######################################
####function

#color_picker function

color_picker() {
	source gettext.sh
    local N=$1 C="$2"
	local YAD=(
            yad
            --title="$(gettext 'color-selector')"
            --class=color-select
            --window-icon=color-select
            --posx=200
            --posy=200
            --color
            --picker
            --init-color="#0f56d9"
            )
	C=$("${YAD[@]}")
	(($?==0)) && echo "$N:$C"
	
}

export -f color_picker

#######################################
####function

appfinder_settings() {


#######################################
####theme

AF_THEME="$(grep 'import' $appfinder_config_path)"
AF_THEMENAME="$(echo $AF_THEME | sed -e "s/\@import//" | sed -e "s/\"//g" | sed -e "s/.rasi//" | sed -e "s/ //g")"
AF_THEMENAME="$(basename $AF_THEMENAME)"

AF_THEME_OTHER=""
AF_THEMELIST=$(ls $target_path/*.rasi)
af_themelist=($AF_THEMELIST)
for i in ${af_themelist[@]}; do
    themelist_rasi=$(basename $i | sed -e 's/\.rasi//')
    if [ "$themelist_rasi" != "$AF_THEMENAME" ]; then
        if [ "$themelist_rasi" != "mxfb-appfinder" ] && [ "$themelist_rasi" != "mxfb-appfinder-config" ]; then
           AF_THEME_OTHER=$(echo $AF_THEME_OTHER!$themelist_rasi)
        fi
    fi
done

#######################################
####highlight color

AF_HILITE="$(grep 'color09:' $appfinder_config_path | sed -e "s/color09\: //" | sed -e "s/\;//" | sed -e "s/ //g")"

#######################################
#### tabs
CURRENTTABS="$(grep 'modi:' $appfinder_path)"

CURRENTTABS1=$(echo $CURRENTTABS | sed -e "s/help:\/usr\/share\/rofi\/rofi-help_appfinder/help/g" )
CURRENTTABS1=$(echo $CURRENTTABS1 | sed -e "s/\\:\/usr\/bin\/app-categories/categories/g" )
CURRENTTABS1=$(echo $CURRENTTABS1 | sed -e "s/\\:\/usr\/bin\/appfinder-exit/exit-options/g" )
CURRENTTABS1=$(echo $CURRENTTABS1 | sed -e 's/modi: //g' | sed -e 's/;//g' | sed -e 's/,/ /g' | sed -e 's/"//g')

tab_array=($CURRENTTABS1)

#TAB_NUMBER=${#tab_array[@]}

CURTAB_1="${tab_array[0]}"

CURTAB_2="${tab_array[1]}"
    if [ -z "$CURTAB_2" ]; then
        CURTAB_2=none
    fi

CURTAB_3="${tab_array[2]}"
    if [ -z "$CURTAB_3" ]; then
        CURTAB_3=none
    fi

CURTAB_4="${tab_array[3]}"
    if [ -z "$CURTAB_4" ]; then
        CURTAB_4=none
    fi

CURTAB_5="${tab_array[4]}"
    if [ -z "$CURTAB_5" ]; then
        CURTAB_5=none
    fi

CURTAB_6="${tab_array[5]}"
    if [ -z "$CURTAB_6" ]; then
        CURTAB_6=none
    fi


#######################################
#### rofi_position

#get current position

ROFILOCATIONOLD="$(grep "location" $appfinder_config_path)"

	if [ "$ROFILOCATIONOLD" = "" ]; then

		ROFILOCATIONOLD='     location: center;'
		sed -ie "/^window/a $ROFILOCATIONOLD" $appfinder_config_path

	fi
	
LOCVALUE=$(echo "${ROFILOCATIONOLD}" | sed -e 's/location\://g' | sed -e 's/\;//g' | sed -e 's/ //g')

ROFILOCATIONOLD=$(echo "${ROFILOCATIONOLD}" | sed -e 's/[]$\/*[\^]/\\&/g' )

######

ROFIANCHOROLD="$(grep "anchor" $appfinder_config_path)"

	if [ "$ROFIANCHOROLD" = "" ]; then

		ROFIANCHOROLD='     anchor: center;'
		sed -ie "/^window/a $ROFIANCHOROLD" $appfinder_config_path

	fi
	
ANCVALUE=$(echo "${ROFIANCHOROLD}" | sed -e 's/anchor\://g' | sed -e 's/\;//g' | sed -e 's/ //g' )

ROFIANCHOROLD=$(echo "${ROFIANCHOROLD}" | sed -e 's/[]$\/*[\^]/\\&/g' )

#####

ROFIXOFFSETOLD="$(grep "x-offset" $appfinder_config_path)"

	if [ "$ROFIXOFFSETOLD" = "" ]; then

		ROFIXOFFSETOLD='     x-offset: 0;'
		sed -ie "/^window/a $ROFIXOFFSETOLD" $appfinder_config_path

	fi

XOFFVALUE=$(echo "${ROFIXOFFSETOLD}" | sed -e 's/x-offset\://g' | sed -e 's/\;//g' )

ROFIXOFFSETOLD=$(echo "${ROFIXOFFSETOLD}" | sed -e 's/[]$\/*[\^]/\\&/g' )

#####

ROFIYOFFSETOLD="$(grep "y-offset" $appfinder_config_path)"

	if [ "$ROFIYOFFSETOLD" = "" ]; then

		ROFIYOFFSETOLD='     y-offset: 0;'
		sed -ie "/^window/a $ROFIYOFFSETOLD" $appfinder_config_path

	fi
	
YOFFVALUE=$(echo "${ROFIYOFFSETOLD}" | sed -e 's/y-offset\://g' | sed -e 's/\;//g' )
	
ROFIYOFFSETOLD=$(echo "${ROFIYOFFSETOLD}" | sed -e 's/[]$\/*[\^]/\\&/g' )

#####

ROFIWIDTHOLD="$(grep -m 1 "width" $appfinder_config_path)"

	if [ "$ROFIWIDTHOLD" = "" ]; then

		ROFIWIDTHOLD='     width: 30%;'
		sed -ie "/^window/a $ROFIWIDTHOLD" $appfinder_config_path

	fi
	
WIDVALUE=$(echo "${ROFIWIDTHOLD}" | sed -e 's/width\://g' | sed -e 's/\;//g' | sed -e 's/\%//g' )

ROFIWIDTHOLD=$(echo "${ROFIWIDTHOLD}" | sed -e 's/[]$\/*[\^]/\\&%/g' )

#####

ROFIHEIGHTOLD="$(grep -m 1 "height" $appfinder_config_path)"

	if [ -z "$ROFIHEIGHTOLD" ]; then

		ROFIHEIGHTOLD='     lines: 12;'
		sed -ie "/^listview/a $ROFIHEIGHTOLD" $appfinder_config_path

	fi


LINVALUE=$(echo "${ROFIHEIGHTOLD}" | sed -e 's/height\://g' | sed -e 's/\;//g' )

ROFIHEIGHTOLD=$(echo "${ROFIHEIGHTOLD}" | sed -e 's/[]$\/*[\^]/\\&%/g' )


###################################################################
#font

ROFIFONTOLD="$(grep "font:" $appfinder_config_path | head -1 )"

	if [ "$ROFIFONTOLD" = "" ]; then

		ROFIFONTOLD='    font: "Noto Sans 12";'
		sed -ie "/^listview/a $ROFIFONTOLD" $appfinder_config_path

	fi

FONVALUE=$(echo "${ROFIFONTOLD}" | sed -e 's/font\://g' | sed -e 's/\;//g'| sed -e 's/\"//g' | sed -e 's/\/\///' )

ROFIFONTOLD=$(echo "${ROFIFONTOLD}" | sed -e 's/[]$\/*"[\^]/\\&/g' )

###################################################################
#windows key
WINKEYOLD="$(grep "rofi -show drun" $HOME/.fluxbox/keys )"

	if [ "$WINKEYOLD" = 'Super_L :Exec rofi -show drun' ]; then
		WINKEYLIST='rofi!appfinder'
    else
        WINKEYLIST='appfinder!rofi'
	fi

###################################################################
#YAD WINDOW
###################################################################

# buttons
export BTN_CLOSE=$(gettext "Close") ; BTN_CLOSE+='!window-close'
export BTN_APPLY=$(gettext "Apply") ; BTN_APPLY+='!object-select'

#

TITLE="$(gettext 'Appfinder Settings')"
CLASS="appfinder-settings"
ICONPATH="/usr/share/pixmaps/mxfb-appfinder-settings.svg"

TABLIST=categories!filebrowser!window!help!exit-options!none

SETTINGS=$(yad --title="$TITLE" --class="$CLASS" --window-icon="$ICONPATH" \
--text-align=left --height=450 --width=600 --borders=20 \
--center --align=right --separator="|" --form --columns=3 --output-by-row \
--button="${BTN_CLOSE}":7 --button="${BTN_APPLY}":6 \
--field="$(gettext 'Theme ')":CB "$AF_THEMENAME$AF_THEME_OTHER" \
--field=" ":LBL "|" \
--field=" ":LBL "|" \
--field="Tab 1 ":RO "All Apps" \
--field="Tab 2 ":CB "$CURTAB_2!$TABLIST" \
--field="Tab 3 ":CB "$CURTAB_3!$TABLIST" \
--field="Tab 4 ":CB "$CURTAB_4!$TABLIST" \
--field="Tab 5 ":CB "$CURTAB_5!$TABLIST" \
--field="Tab 6 ":CB "$CURTAB_6!$TABLIST" \
--field=" ":LBL "|" \
--field="$(gettext '   Highlight Color ')":CLR "$AF_HILITE" \
--field="$(gettext 'Super Key opens ')":CB "$WINKEYLIST" \
--field=" ":LBL "|" \
--field="$(gettext 'Location ')":CB "$LOCVALUE!northwest!north!northeast!west!center!east!southwest!south!southeast" \
--field="$(gettext 'X-Offset ')":NUM  "$XOFFVALUE\!-500..500\!1\!0" \
--field="$(gettext 'Y-Offset ')":NUM "$YOFFVALUE\!-500..500\!1\!0" \
--field="$(gettext 'Width ')":NUM "$WIDVALUE\!1..100\!1\!0" \
--field="$(gettext 'Height ')":NUM "$LINVALUE\!1..100\!1\!0" \
--field="$(gettext 'Font ')":FN "$FONVALUE" \
--field=" ":LBL "|" \
--field='!color-select!':BTN '@bash -c "color_picker 9 %9;"' \
--field=" ":LBL "|" \
--field=" ":LBL "|" \
--field=" ":LBL "|" \
--field="px  ":LBL "|" \
--field="px  ":LBL "|" \
--field="%   ":LBL "|" \
--field="%   ":LBL "|" \
--field=" ":LBL "|" \
--field=" ":LBL "|"
)

ret=$?

case $ret in
    7 | 252 )
        ENDLOOP=getouttahere
    ;;

    6 )
    
    RES=$(echo "$SETTINGS" | sed -e "s/ /-/g" | sed -e "s/|/ /g" | sed -e "s/__/ /g" | sed -e "s/___/ /g" | sed -e "s/____/ /g")

    af_settings=($RES)

###################################################################
###################################################################
#apply theme
    AF_THEMENAME_NEW="${af_settings[0]}"

    if [ "$AF_THEMENAME_NEW" != "$AF_THEMENAME" ]; then

        AF_THEME_NEW="@import \"~/.config/rofi/themes/appfinder/"$AF_THEMENAME_NEW".rasi\""

        AF_THEME=$(echo "${AF_THEME}" | sed -e 's/[]$\/*[\^]/\\&/g' )
        AF_THEME_NEW=$(echo "${AF_THEME_NEW}" | sed -e 's/[]$\/*[\^]/\\&/g' )

        sed -i -e "s/${AF_THEME}/${AF_THEME_NEW}/g" $appfinder_config_path

    fi

###################################################################
#apply highlight color

    AF_HILITE_NEW="${af_settings[1]}"

    if [ "$AF_HILITE_NEW" != "$AF_HILITE" ]; then
        sed -i "s/color09\: $AF_HILITE/color09\: $AF_HILITE_NEW/" $appfinder_config_path
    fi

###################################################################
#apply windows key

    WINKEYNEW="${af_settings[2]}"
    
    if [ "$WINKEYNEW" = 'rofi' ]; then
		WINKEYNEW='Super_L :Exec rofi -show drun'
    else
        WINKEYNEW='Super_L :Exec rofi -show drun -theme ~/.config/rofi/themes/appfinder/mxfb-appfinder.rasi'
	fi
	
	WINKEYNEW=$(echo "${WINKEYNEW}" | sed -e 's/[]$\/"*[\^]/\\&/g' )
	WINKEYOLD=$(echo "${WINKEYOLD}" | sed -e 's/[]$\/"*[\^]/\\&/g' )
		
	if [ "$WINKEYNEW" != "$WINKEYOLD" ]; then
        sed -i -e "s/${WINKEYOLD}/${WINKEYNEW}/g" $HOME/.fluxbox/keys
        fluxbox-remote reconfigure
    fi
    
###################################################################
#apply tabs

    NEWTABS="modi: \"drun,"${af_settings[5]}","${af_settings[7]}","${af_settings[9]}","${af_settings[11]}","${af_settings[13]}"\";"

    NEWTABS=$(echo "${NEWTABS}" | sed -e "s/categories/\\:\/usr\/bin\/app-categories/g" )
    NEWTABS=$(echo "${NEWTABS}" | sed -e "s/help/help\:\/usr\/share\/rofi\/rofi-help_appfinder/g" )
    NEWTABS=$(echo "${NEWTABS}" | sed -e "s/,none//g" )
    NEWTABS=$(echo "${NEWTABS}" | sed -e "s/exit-options/\\:\/usr\/bin\/appfinder-exit/g" )

    if [ "$NEWTABS" != "$CURRENTTABS" ]; then
        NEWTABS=$(echo "${NEWTABS}" | sed -e 's/[]$\/*[\^]/\\&/g' )
        CURRENTTABS=$(echo "${CURRENTTABS}" | sed -e 's/[]$\/*[\^]/\\&/g' )
        sed -i "s/${CURRENTTABS}/${NEWTABS}/" $appfinder_path
    fi

###################################################################
#apply new position

    LOCNEW="${af_settings[4]}"
    XOFNEW="${af_settings[6]}"
    YOFNEW="${af_settings[8]}"
    WIDNEW="${af_settings[10]}"
    HIGNEW="${af_settings[12]}"

    ROFILOCATIONNEW="location: "$LOCNEW";"
    ROFILOCATIONNEW=$(echo "${ROFILOCATIONNEW}" | sed -e 's/[]$\/*[\^]/\\&/g' )

    ROFIANCHORNEW="anchor: "$LOCNEW";"
    ROFIANCHORNEW=$(echo "${ROFIANCHORNEW}" | sed -e 's/[]$\/*[\^]/\\&/g' )

    ROFIXOFFSETNEW="x-offset: "$XOFNEW";"
    ROFIXOFFSETNEW=$(echo "${ROFIXOFFSETNEW}" | sed -e 's/[]$\/*[\^]/\\&/g' )

    ROFIYOFFSETNEW="y-offset: "$YOFNEW";"
    ROFIYOFFSETNEW=$(echo "${ROFIYOFFSETNEW}" | sed -e 's/[]$\/*[\^]/\\&/g' )

    ROFIWIDTHNEW="width: "$WIDNEW"%;"
    ROFIWIDTHNEW=$(echo "${ROFIWIDTHNEW}" | sed -e 's/[]$\/*[\^]/\\&%/g')

    ROFIHEIGHTNEW="height: "$HIGNEW"%;"
    ROFIHEIGHTNEW=$(echo "${ROFIHEIGHTNEW}" | sed -e 's/[]$\/*[\^]/\\&%/g')

#check change

    if [ "$ROFILOCATIONNEW" != "$ROFILOCATIONOLD" ]; then
        sed -i -e "s/${ROFILOCATIONOLD}/${ROFILOCATIONNEW}/g" $appfinder_config_path
    fi

    if [ "$ROFIANCHORNEW" != "$ROFIANCHOROLD" ]; then
        sed -i -e "s/${ROFIANCHOROLD}/${ROFIANCHORNEW}/g" $appfinder_config_path
    fi

    if [ "$ROFIXOFFSETNEW" != "$ROFIXOFFSETOLD" ]; then  
        sed -i -e "s/${ROFIXOFFSETOLD}/${ROFIXOFFSETNEW}/g" $appfinder_config_path
    fi   

    if [ "$ROFIYOFFSETNEW" != "$ROFIYOFFSETOLD" ]; then    
        sed -i -e "s/${ROFIYOFFSETOLD}/${ROFIYOFFSETNEW}/g" $appfinder_config_path
    fi  

    if [ "$ROFIWIDTHNEW" != "$ROFIWIDTHOLD" ]; then
        sed -i -e "s/${ROFIWIDTHOLD}/${ROFIWIDTHNEW}/g" $appfinder_config_path
    fi   

    if [ "$ROFIHEIGHTNEW" != "$ROFIHEIGHTOLD" ]; then
        sed -i -e "s/${ROFIHEIGHTOLD}/${ROFIHEIGHTNEW}/g" $appfinder_config_path
    fi


###################################################################
#apply font

    FONT_NEW=$(echo "${af_settings[@]:14}" | sed -e "s/-/ /g")
    ROFIFONTNEW="font: \""$FONT_NEW"\";"
    ROFIFONTNEW=$(echo "${ROFIFONTNEW}" | sed -e 's/[]$\/"*[\^]/\\&/g' )

    if [ "$ROFIFONTNEW" != "$ROFIFONTOLD" ]; then
        sed -i -e "s/${ROFIFONTOLD}/${ROFIFONTNEW}/g" $appfinder_config_path
    fi

    ;;
esac

}

export appfinder_settings


################################################
####

until [ "$ENDLOOP" = "getouttahere" ]; do
    appfinder_settings
done


exit
