#!/bin/bash

Info () {
title="Info"
author="Peter Starfinger"
mail="E-Mail: info@die-starfingers.de"
year="2023"
app="$(basename $0)"
msgid="The Starbuntu application
<i>\$app</i>
was written by"
info="$(gettext "$msgid" | (export PATH `envsubst --variables "$msgid"`; envsubst "$msgid"))"

yad --center --fixed --title="$title" --window-icon="info" --image="info" --borders=20 --text="$info"$'\n'$'\n'"$author"$'\n'"$mail"$'\n'$'\n'"$year"$'\n' --text-align=center --selectable-labels --button="OK" &
wunwa "$title" > /dev/null; xdotool key Home key Down
}

list0="$1"
[ "$1" = "info" ] && Info && exit 0
[[ "$list0" =~ ^notes$|^files$|^links$ ]] && list0="$HOME/.config/gtk-3.0/$list0.lst"
[[ "$list0" =~ ^apps$ ]] && list0="$HOME/.config/menus/Apps.lst"
list="$list0"
title="Search List Item"

if [ "${list: -4}" != ".lst" ] || [ ! -f "$list" ]; then
    text=$"&#10;Which list to search?&#10;"
    field=$"List: "
    button1=$"Cancel"
    cd
    list0=`yad --center --title="$title" --width=600 --height=200 --window-icon="$HOME/.icons/system-search.png" --borders=10 --text="<b>$text</b>" --text-align=center --form --field="$field":SFL "$HOME/.config/gtk-3.0" --file-filter $"List Files "" | *.lst" --button="$button1":1 --button="Info":"$0 info" --button="OK":0`
    button=$?
    if [ $button -eq 1 ] || [ -z "$list0" ]; then exit 1; fi
    list0="${list0::-1}"
    [[ "$list0" =~ ^notes$|^files$|^links$ ]] && list0="$HOME/.config/gtk-3.0/$list0.lst"
    [[ "$list0" =~ ^apps$ ]] && list="$HOME/.config/menus/Apps.lst"
    list="$list0"
fi

keyword="$@"
keyword="${keyword/$1/}"
keyword="${keyword:1}"
[[ "$keyword" =~ "--next" ]] && next=$(echo "$keyword" | sed -E 's|^.*--next=([0-9]*)|\1|') && keyword=$(echo "$keyword" | sed -E 's|^(.*) --next=[0-9]*|\1|') || next=0
ll=0
IFS=$'\n'

title1=$"List Item Keyword"
text1="$title1:"
button1=$"Cancel"

if [ -z "$keyword" ]; then
    keyword="`yad --center --fixed --title="$title1" --image="system-search" --image-on-top --window-icon="system-search" --borders=10 --text="<b>$text1</b>" --entry --button=$button1:1 --button="Info":"$0 info" --button="OK":0`"
  err=$?
  if [ $err -ne 0 ] || [ -z "$keyword" ]; then exit 1; fi
fi

if [ "$(basename "$list")" = "Apps.lst" ]; then
    cd $HOME/.config/menus
    menus=()
    found=($(grep -E -i "$keyword[^‖]*$" *.lst | grep -v "▶ "))
    ll=${#found[@]}
    if [ -n "${found[$next]}" ]; then
	f_menu="${found[$next]%%.lst*}"
	ff_menu="$f_menu"
	menus+=($(cat "$f_menu.lst" | sed -E "s/‖([^‖]*$)/‖{$f_menu}\1/g; s/‖(.*)‖▶ /‖{\1}‖▶ /g"))
	until [ "$f_menu" = "Apps" ]; do
	    f_menu="$(grep "‖$f_menu‖" *.lst)"
	    f_menu="${f_menu%%.lst*}"
	    menus+=($(cat "$f_menu.lst"))
	    menus=($(echo "${menus[*]}" | sed -E "s/‖(.*)‖(.*)▶ /‖{\1}‖\2▶ /g; s/\{\{/{/g; s/\}\}/}/g"))
	    [ "$f_menu" != "Apps" ] && menus=($(echo "${menus[*]}" | sed -E "s/‖([^‖]*$)/‖{$f_menu}\1/g"))
	done
	echo "${menus[*]}" > /tmp/hsperfdata_$USER/menus.lst
	list="/tmp/hsperfdata_$USER/menus.lst"
	for ((k=0; k<$ll; k++)); do [[ "${found[$k]}" =~ ^$ff_menu ]] && kk=$k && break; done
	for ((k=$kk; k<$ll; k++)); do unset found[$k]; done
    else
	ll=0
    fi
fi

if [ "$(basename "$list")" != "Apps.lst" ]; then
    found+=($(grep -E -i "[^\{]$keyword[^‖]*$" "$list" | grep -v -i "▶ $keyword"))
    l=${#found[@]}
fi

if [ $l -eq 0 ]; then
    text2=$"&#10;    Item with the keyword '$keyword' not found!&#10;"
    yad --center --fixed --title="$title1" --borders=20 --image="dialog-warning" --window-icon="system-search" --text="$text2" --button="Info":"$0 info" --button="OK"
    exit 0
fi
found0="${found[$next]}"
ids="${found0##*‖}"
if [ "${ids::1}" = "{" ]; then
    ids="${ids%\}*}}"
    id="${ids%%\}*}}"
    title_new="$(grep "${id}‖" "$list")"
    title_new="${title_new#*▶ }"
fi
id_old="‖"

multimenu "$list" &

case "$list" in
    *notes.lst ) title="Memo Menu" ;;
    *files.lst ) title="Files Menu" ;;
    *links.lst ) title="Links Menu" ;;
    *          ) title="List Menu" ;;
esac

while [ "${ids::1}" = "{" ]; do
    wunwa "$title" > /dev/null
    n="$(grep "${id_old}[^{^‖]*$" "$list" | grep -v ^‖ | grep -n "▶ $title_new$")"
    n=${n%%:*}
    ([ $id_old = "‖" ] || [ -e "/tmp/hsperfdata_$USER/menus.lst" ]) && ((n--))
    for ((k=0; k<n; k++)); do xdotool key Down; done
    sleep 1
    xdotool key Return
    ids="${ids/$id/}"
    title="$(grep "${id}‖" "$list")"
    title="${title#*▶ } Menu"
    id_old="$id"
    id="${ids%%\}*}}"; [ "$id" = "}" ] && id=""
    if [ -n "$id" ]; then
	title_new="$(grep "${id}‖" "$list")"
	title_new="${title_new#*▶ }"
    fi
done
wunwa "$title" > /dev/null
found0="${found0##*‖}"
line="$(grep "${id_old}[^{^‖]*$" "$list" | grep -v ^‖ | grep -n -i "$found0$")"
n=${line%%:*}
([ $id_old = "‖" ] || [ -e "/tmp/hsperfdata_$USER/menus.lst" ]) && ((n--))
for ((k=0; k<n; k++)); do xdotool key Down; done
[ -e "/tmp/hsperfdata_$USER/menus.lst" ] && rm /tmp/hsperfdata_$USER/menus.lst

[ $ll -gt 0 ] && l=$ll
if [ $l -gt 1 ] && [ $next -lt $((l-1)) ]; then
    yad --title="Search List Item" --width=210 --window-icon="$HOME/.icons/system-search.png" --button=$"Cancel":1 --button=$"Next":0
    [ $? -eq 0 ] && del yad && $0 "$list0" "$keyword" --next=$((next+1)) && exit 0
fi
