#!/usr/bin/bash

geticonlist() {
    classes=$(hyprctl clients | grep -e 'class: ' | sed 's/\tclass: //')
    addresses=$(hyprctl clients | grep -e ' -> ')
    # echo "$classes"
    IFS=$'\n'
    classarr=($(echo "$classes"))
    addressarr=($(echo "$addresses"))
    iconarr=($(echo "$classes"))

    for i in "${!classarr[@]}"; do
        addressarr[i]=$(echo "0x${addressarr[i]% -> *}" | sed 's/Window //')
        # echo "${addressarr[i]}"
    done

    for i in "${!classarr[@]}"; do
        classarr[i]=$(echo ${classarr[i]})
        if [ -f "scripts/cache/${classarr[i]}" ]; then
            iconarr[i]=$(cat scripts/cache/${classarr[i]})
            if [ ! -f "${iconarr[i]}" ]; then # Cache refresh if icon doesnt exist
                iconarr[i]=$(scripts/get-icon.py "${classarr[i]}")
                echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
            fi
        else
            iconarr[i]=$(scripts/get-icon.py "${classarr[i]}")
            echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
        fi
        if [[ ${iconarr[i]} = "not found" ]]; then
          iconarr[i]=$(scripts/get-icon.py "$(echo "${classarr[i]##*.}" | tr '[:upper:]' '[:lower:]')")
          if [[ ! ${iconarr[i]} = "not found" ]]; then
            rm "scripts/cache/${classarr[i]}"
            echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
          else 
            iconarr[i]="/home/$USER/.local/share/icons/candy-icons/mimetypes/scalable/application-x-theme.svg"
            rm "scripts/cache/${classarr[i]}"
            echo "${iconarr[i]}" > "scripts/cache/${classarr[i]}"
          fi
        fi
    done

    printf '['
    for i in "${!classarr[@]}"; do
        if [ $i -ne 0 ]; then
          printf ', '
        fi
        # printf '{'
        # printf "\"${addressarr[i]}\": \"${iconarr[i]}\""
        # printf '}'
        printf "\"${iconarr[i]}\""
    done
    printf ']\n'
}

geticonlist

if [ "$1" == "--once" ]; then
  exit 0
else
  socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
    geticonlist
  done
fi

