#!/bin/bash
#
#    colorizer - set of tools for Mabox (auto)theming
#    Copyright (C) 2022-2026 Daniel Napora    <danieln@maboxlinux.org>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

. /usr/share/mb-jgtools/jgtools.inc


SYSSCHEMES="/usr/share/mabox-colorizer/colorschemes/menus.csv"
USERSCHEMES="$HOME/.config/colorizer/menus/userschemes2.csv"


### Wallpaper colors
WALLPALDIR="$HOME/.cache/colorizer/palettes"
mkdir -p "$WALLPALDIR"
read WALLPATH<<< $(grep file "$HOME"/.config/nitrogen/bg-saved.cfg | tail -1 | cut -d'=' -f2)
NAME=${WALLPATH////_}
if [[ "${NAME}" =~ ^_home_.* ]]; then
n=${#HOME}
((n++))
NAME=${NAME:${n}}
fi

if [ ! -f "$WALLPALDIR/$NAME.clr" ]; then
convert ${WALLPATH} -resize 25% -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print substr($3,1,7)}' |pastel sort-by brightness |pastel format hex > "$WALLPALDIR/$NAME.clr"
fi
mapfile -t w < "$WALLPALDIR/$NAME.clr"



me="colorizer-menus -s"
#. $HOME/.config/mabox/mabox.conf
#case "$jgmenu_theme" in
#    obtheme)
#    OBTHEME=$(awk '/<theme>/ {while (getline n) {if (match(n, /<name>/))
#              {l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$HOME/.config/openbox/rc.xml");
#    #echo "$OBTHEME"
#    THEMERC="$HOME/.config/mabox/jgobthemes/${OBTHEME}.colorrc"
#    jgmenu_theme="$OBTHEME";; #only to show real theme name in menu
#    *)
#    THEMERC="$HOME/.config/mabox/jgobthemes/${jgmenu_theme}.colorrc";;
#esac
THEMERC="$HOME/.config/mabox/jgobthemes/MBcolors.colorrc"

GRADIENT_FILE="$HOME"/.config/colorizer/gradients_menu.inc

if [ ! -f "$GRADIENT_FILE" ]; then
cp /usr/share/mabox-colorizer/gradients_menu.inc "$GRADIENT_FILE"
fi

# Backup original theme file
if [ ! -f "${THEMERC}.bak" ]; then
    cp ${THEMERC} ${THEMERC}.bak
fi
case "$LANG" in
    pl*)
    MENU_THEME="Motyw menu"
    QUICK_TWEAKS="Ustawienia główne"
    OVERALL_STYLE="Ogólny styl"
    SCHEMES="Motywy kolorystycznie"
    SYSTEM_SCHEMES="Systemowe"
    YOUR_SCHEMES="Moje motywy"
    SAVE_CURRSCHEME="Zapisz aktualną kolorystykę jako..."
    OPEN_SCHEMEFILE="Odwórz plik ze schematami w edytorze"
    COLORSCHEME="Schemat kolorów"
    APPLY_SCHEME="Zastosuj"
    DELETE="Usuń"
    DELETE_SCHEME="Usuń schemat kolorów"
    BORDER="Obramowanie"
    PADDING="Margines wewnętrzny"
    RADIUS="Zaokrąglone rogi"
    SUBSPACING="Odstęp submenu"
    LINE_HEIGHT="Wysokość lini"
    ARROW_STRING="Znak strzałki"
    ARROW_STRING_LEFT="Znak strzałki lewej"
    MBG_OPACITY="(Nie)przeźroczystość Menu"
    SIZING="Rozmiar menu"
    WIDE="szerokie"
    NORMAL="normalne"
    TIGHT="wąskie"
    MONOCHROMATIC="Monochromatyczny"
    CHOOSE_AND_PICK="Wybierz wariant i pobierz kolor..."
    GENERATEFROMWP="<i>Generuj z kolorów tapety...</i>"
    EXACT="Dokładny"
    LIGHTBG="Jasne tło"
    DARKBG="Ciemne tło"
    COLOR_MENU_BG="Tło menu"
    COLOR_MENU_BG_TO="Tło menu 2 (gradient)"
    COLOR_MENU_BORDER="Obramowanie menu"
    GRADIENT_POS="Kierunek gradientu"
    NONE="brak gradientu (none)"
    TOP="od góry (top)"
    RIGHT="od prawej (right)"
    BOTTOM="z dołu (bottom)"
    LEFT="od lewej (left)"
    TOP_LEFT="od góry z lewej (top_left)"
    TOP_RIGHT="od góry z prawej (top_right)"
    BOTTOM_LEFT="z dołu od lewej (bottom_left)"
    BOTTOM_RIGHT="z dołu od prawej (bottom_right)"
    PRE_GRADIENTS="Zastosuj gradient"
    GRADIENT_REVERSE="Odwróć kolory Gradientu"
    ITEM="Pozycja (element) menu "
    FONT="Czcionka"
    FONTS="Czcionki"
    INCREASE="Powiększ do"
    DECREASE="Pomniejsz do"
    FONT_CUSTOM="Wybierz czcionkę i rozmiar..."
    FONT_FAMILY="rodzina"
    FONT_SIZE="rozmiar"
    ITEM_FONT="Czcionka elementu"
    TITLE_FONT="Czcionka nagłówka"
    COLOR_NORM_FG="Kolor tekstu"
    SEL_ITEM="Aktywny element (akcent)"
    COLOR_SEL_BG="Tło"
    COLOR_SEL_FG="Tekst"
    COLOR_SEL_BORDER="Obramowanie"
    I_BORDER="Obramowanie"
    I_RADIUS="i Zaokrąglenie"
    ITEM_BORDER="Obramowanie (px)"
    ITEM_RADIUS="Zaokrąglenie (px)"
    COLOR_NORM_BG="Tło"
    SEPARATOR_TITLE="Separator/Nagłówek"
    TITLE="Nagłówek"
    COLOR_TITLE_BG="Tło"
    COLOR_TITLE_FG="Tekst"
    COLOR_TITLE_BORDER="Obramowanie"
    SEP_HALIGN="Wyrównanie"
    H_LEFT="do lewej"
    H_CENTER="po środku"
    H_RIGHT="do prawej"
    COLOR_SEP_FG="Kolor separatora (linii)"
    MORE_MENU_SETTINGS="więcej ustawień menu"
    GLOBAL_MENU_SETTINGS="Globalne Ustawienia Menu"
    RESET="Resetuj motyw"
    TO_DEFAULT=""
    EDIT="Edytuj plik "
    FILE="plik"
    SET_RANDOM="Ustaw losowy motyw menu"
    _COLORIZER_ROOT="<b>Colorizer</b> - menu główne"
    _LEFTSIDEPANEL="Lewy panel boczny"
    ;;
    *)
    MENU_THEME="Menu theme"
    QUICK_TWEAKS="Global Settings/Quick Tweaks"
    OVERALL_STYLE="Overall style"
    SCHEMES="Color Schemes"
    SYSTEM_SCHEMES="System colorschemes"
    YOUR_SCHEMES="My colorschemes"
    SAVE_CURRSCHEME="Save current colors as..."
    OPEN_SCHEMEFILE="Open schemes file in editor"
    COLORSCHEME="Color Scheme"
    APPLY_SCHEME="Apply colorscheme"
    DELETE="Delete"
    DELETE_SCHEME="Delete colorscheme"
    BORDER="Menu Border"
    PADDING="Padding"
    RADIUS="Rounded Corners"
    SUBSPACING="Submenu Spacing"
    LINE_HEIGHT="Line height"
    ARROW_STRING="Arrow string"
    ARROW_STRING_LEFT="Left Arrow string"
    MBG_OPACITY="Menu BG Opacity"
    SIZING="Menu sizing"
    WIDE="wide"
    NORMAL="normal"
    TIGHT="tight"
    MONOCHROMATIC="Monochromatic"
    CHOOSE_AND_PICK="Choose variant and pick color..."
    GENERATEFROMWP="<i>Generate from wallpaper colors...</i>"
    EXACT="Exact"
    LIGHTBG="Light Background"
    DARKBG="Dark Background"
    COLOR_MENU_BG="Background (BG)"
    COLOR_MENU_BG_TO="BG to (gradient)"
    COLOR_MENU_BORDER="Menu Border"
    GRADIENT_POS="Gradient direction"
    NONE="none"
    TOP="top"
    RIGHT="right"
    BOTTOM="bottom"
    LEFT="left"
    TOP_LEFT="top_left"
    TOP_RIGHT="top_right"
    BOTTOM_LEFT="bottom_left"
    BOTTOM_RIGHT="bottom_right"
    PRE_GRADIENTS="Apply gradient"
    GRADIENT_REVERSE="Reverse gradient colors"
    ITEM="Item"
    FONT="Font"
    FONTS="Fonts"
    INCREASE="Increase to"
    DECREASE="Decrease to"
    FONT_CUSTOM="Select custom font and size..."
    FONT_FAMILY="font family"
    FONT_SIZE="font size"
    ITEM_FONT="Item Font"
    TITLE_FONT="Title Font"
    COLOR_NORM_FG="Text Color"
    SEL_ITEM="Selected Item (accent)"
    COLOR_SEL_BG="Background"
    COLOR_SEL_FG="Text"
    COLOR_SEL_BORDER="Border"
    I_BORDER="Item Border"
    I_RADIUS="and Radius"
    ITEM_BORDER="Item Border (px)"
    ITEM_RADIUS="Item Radius (px)"
    COLOR_NORM_BG="Item Background"
    SEPARATOR_TITLE="Separator/Title"
    TITLE="Title"
    COLOR_TITLE_BG="Background"
    COLOR_TITLE_FG="Text"
    COLOR_TITLE_BORDER=" Border color "
    SEP_HALIGN="Alignment"
    H_LEFT="left"
    H_CENTER="center"
    H_RIGHT="right"
    COLOR_SEP_FG="Separator (line) color"
    MORE_MENU_SETTINGS="more menu settings"
    GLOBAL_MENU_SETTINGS="Global Menu Settings"
    RESET="Reset"
    TO_DEFAULT="to default"
    EDIT="Edit"
    FILE="file"
    SET_RANDOM="Set random menu theme"
    _COLORIZER_ROOT="<b>Colorizer</b> rootmenu"
    _LEFTSIDEPANEL="Left Sidepanel"
    ;;
esac

getvalues () {
    read MBG MBGA<<< "$(grep 'color_menu_bg ' ${THEMERC} | cut -d'=' -f2)"
    read MBGT MBGTA<<< "$(grep 'color_menu_bg_to' ${THEMERC} | cut -d'=' -f2)"
    read MBORDER MBORDERA<<< "$(grep 'color_menu_border' ${THEMERC} | cut -d'=' -f2)"
    read GRADIENT<<< "$(grep 'menu_gradient_pos' ${THEMERC} | cut -d'=' -f2)"
    if [ "$GRADIENT" == "" ]; then
    mb-setvar menu_gradient_pos=none ${THEMERC}
    read GRADIENT<<< "$(grep 'menu_gradient_pos' ${THEMERC} | cut -d'=' -f2)"
    fi
    read SEPHALIGN<<< "$(grep 'sep_halign' ${THEMERC} | cut -d'=' -f2)"
    read SEPFG SEPFGA<<< "$(grep 'color_sep_fg' ${THEMERC} | cut -d'=' -f2)"
    read TBG TBGA<<< "$(grep 'color_title_bg' ${THEMERC} | cut -d'=' -f2)"
    read TFG TFGA<<< "$(grep 'color_title_fg' ${THEMERC} | cut -d'=' -f2)"
    read TBORDER TBORDERA<<< "$(grep 'color_title_border' ${THEMERC} | cut -d'=' -f2)"
    read NORMBG NORMBGA<<< "$(grep color_norm_bg ${THEMERC} | cut -d'=' -f2)"
    [[ "$NORMBG" == "" ]] && NORMBG="${MBG}" NORMBGA=0
    read NFG NFGA<<< "$(grep color_norm_fg ${THEMERC} | cut -d'=' -f2)"
    read SBG SBGA<<< "$(grep 'color_sel_bg' ${THEMERC} | cut -d'=' -f2)"
    read SFG SFGA<<< "$(grep 'color_sel_fg' ${THEMERC} | cut -d'=' -f2)"
    read SBORDER SBORDERA<<< "$(grep 'color_sel_border' ${THEMERC} | cut -d'=' -f2)"
    read IBORDER<<< "$(grep 'item_border' ${THEMERC} | cut -d'=' -f2)"
    read IRADIUS<<< "$(grep 'item_radius' ${THEMERC} | cut -d'=' -f2)"
}
getvalues

# Current colors
currcolors="${MBG}|${MBGA}|${MBGT}|${MBGTA}|${MBORDER}|${MBORDERA}|${TBG}|${TBGA}|${TFG}|${TFGA}|${TBORDER}|${TBORDERA}|${NORMBG}|${NORMBGA}|${NFG}|${NFGA}|${SBG}|${SBGA}|${SFG}|${SFGA}|${SBORDER}|${SBORDERA}|${SEPFG}|${SEPFGA}|${jgtools_border}|${jgtools_radius}|${jgtools_padding}|${submenu_spacing}|${IBORDER}|${IRADIUS}|${arrow_string}|${arrow_string_left}|${SEPHALIGN}|${GRADIENT}|"
#echo "${currcolors}" > ~/.config/mabox/.menu_colors
###notify-send.sh "Currcolors" "${currcolors}"
if [ ! -f "$USERSCHEMES" ]; then
    mkdir -p "$HOME/.config/colorizer/menus/"
    echo "  MBG  |opa| MBGT  |opa|MBORDER|opa|  TBG  |opa|  TFG  |opa|TBORDER|opa|NORMBG |opa|  NFG  |opa|  SBG  |opa|  SFG  |opa|SBORDER|opa| SEPFG  |opa|B|R|P|SS|IB|IR|A|AL|SEPHAL|GRADIENT|scheme_name" > "$USERSCHEMES"
fi

#out+=("^sep($MENU_THEME: <i>${jgmenu_theme}</i>)")
out+=("<big></big>   $QUICK_TWEAKS,^checkout(tweaks)")

    out2+=("^tag(tweaks)")
    out2+=("^sep($OVERALL_STYLE)")
    ######
    out2+=("$BORDER 	[ <b>${jgtools_border:-0}px</b> ],^checkout(mborder)")
    out2+=("$PADDING 	[ <b>${jgtools_padding:-0}px</b> ],^checkout(mpadding)")
    #out2+=("$RADIUS [ <b>${jgtools_radius:-0}</b> ],^checkout(mradius)")
    out2+=("$SUBSPACING 	[ <b>${submenu_spacing:-0}px</b> ],^checkout(subspacing)")
    out2+=("^sep()")
    out2+=("$LINE_HEIGHT 	[ <b>$item_height_factor%</b> ],^checkout(lineheight)")
    out2+=("^sep()")
    out2+=("$ARROW_STRING 	[ <b>$arrow_string</b> ],^checkout(arrow)")
    out2+=("$ARROW_STRING_LEFT 	[ <b>$arrow_string_left</b> ],^checkout(arrowleft)")


        out3+=("^tag(mborder)")
        out3+=("^sep($BORDER)")
        for i in 0 1 2 3 4 5 6 8 10 12; do [[ "$jgtools_border" == $i ]] && out3+=("<big>${ron}</big>   $(printf "<b><tt>%3s</tt></b>,%s" "$i" "jgctl border ${i}")") || out3+=("<big>${roff}</big>   $(printf "<tt>%3s</tt>,%s" "$i" "jgctl border ${i}")");done

        out3+=("^tag(mpadding)")
        out3+=("^sep($PADDING)")
        for i in 0 2 4 6 8 10 12 14 16 18 20 22 24 28 32 40; do [[ "$jgtools_padding" == $i ]] && out3+=("<big>${ron}</big>   $(printf "<b><tt>%3s</tt></b>,%s" "$i" "jgctl padding ${i}")") || out3+=("<big>${roff}</big>   $(printf "<tt>%3s</tt>,%s" "$i" "jgctl padding ${i}")");done

        out3+=("^tag(subspacing)")
        out3+=("^sep($SUBSPACING)")
        for i in -20 -12 -10 -8 -6 -4 -2 0 1 2 4 6 8 10 12 14 16 18 20; do [[ "$submenu_spacing" == $i ]] && out3+=("<big>${ron}</big>   $(printf "<b><tt>%4s</tt></b>,%s" "$i" "mb-setvar submenu_spacing=${i};$me")") || out3+=("<big>${roff}</big>   $(printf "<tt>%4s</tt>,%s" "$i" "mb-setvar submenu_spacing=${i};$me")");done

        out3+=("^tag(lineheight)")
        out3+=("^sep($LINE_HEIGHT)")
            for i in 160 180 200 220 240 280 300; do [[ "$item_height_factor" == $i ]] && out3+=("<big>${ron}</big>   $(printf "<b><tt>%4s%%</tt></b>,%s" "$i" "mb-setvar item_height_factor=${i};$me")") || out3+=("<big>${roff}</big>   $(printf "<tt>%4s%%</tt>,%s" "$i" "mb-setvar item_height_factor=${i};$me")");done
            
        out3+=("^tag(arrow)")
        out3+=("^sep($ARROW_STRING)")
        for i in "" "" "" "" "" "" "󰔰" "󰮺" "" "壟" "" "" "" "" "" "󰋇" "..." ":." "." "+" "^" "-" "_" "" "" "󰞔" "" ""; do [[ "$arrow_string" == $i ]] && out3+=("<tt>&gt;&gt;  </tt>$i<tt>  &lt;&lt;</tt>,$me") || out3+=("<tt>    </tt>$i,mb-setvar arrow_string=${i};$me");done

        out3+=("^tag(arrowleft)")
        out3+=("^sep($ARROW_STRING_LEFT)")
        for i in "" "" "" "" "" "" "󰶢" "󰮹" "" "鹿" "" "" "" "" "" "󰩔"; do [[ "$arrow_string_left" == $i ]] && out3+=("<tt>&gt;&gt;  </tt>$i<tt>  &lt;&lt;</tt>,$me") || out3+=("<tt>    </tt>$i,mb-setvar arrow_string_left=${i};$me");done

    out2+=("^sep()")
    out2+=("$MBG_OPACITY,^checkout(mbgopacity")
        out3+=("^tag(mbgopacity)")
        out3+=("^sep(mbgopacity)")
        out3+=("100% Opaque,jgctl tweak opacity 100;$me")
        out3+=("90%,jgctl tweak opacity 90;$me")
        out3+=("80%,jgctl tweak opacity 80;$me")
        out3+=("60%,jgctl tweak opacity 60;$me")
        out3+=("50%,jgctl tweak opacity 50;$me")
        out3+=("40%,jgctl tweak opacity 40;$me")
        out3+=("30%,jgctl tweak opacity 30;$me")
        out3+=("20%,jgctl tweak opacity 20;$me")
        out3+=("10%,jgctl tweak opacity 10;$me")
        out3+=("0% Fully transparent,jgctl tweak opacity 0;$me")

    out2+=("^sep()")
    out2+=("Solid Color,jgctl tweak solid;$me")
    out2+=("Gradient,jgctl tweak gradient;$me")


    out2+=("^sep($SIZING)")
    out2+=("$WIDE,jgctl tweak sizing wide;$me")
    out2+=("$NORMAL,jgctl tweak sizing normal;$me")
    out2+=("$TIGHT,jgctl tweak sizing tight;$me")



#### COLOR SCHEMES  
out+=("<big><span bgcolor='${MBG}'> <span fgcolor='${TBG}'></span> <span fgcolor='${SFG}'></span> <span fgcolor='${SBG}'></span> </span></big> $SCHEMES,^checkout(schemes)")
    out2+=("^tag(schemes)")
    out2+=("^sep($SCHEMES)")
    out2+=("^sep($MONOCHROMATIC)")
    out2+=("^sep(<i>$CHOOSE_AND_PICK</i>)")
    out2+=("<big></big>   $EXACT...,jgctl mono pick exact col")
    out2+=("^sep()")
    out2+=("<big></big>   $LIGHTBG...,jgctl mono pick light col")
    out2+=("<big></big>   $DARKBG...,jgctl mono pick dark col")
    out2+=("^sep($GENERATEFROMWP)")
    out2+=("<big><span bgcolor='${w[-3]}'>     <span bgcolor='${w[-5]}'>     <span bgcolor='${w[-1]}' fgcolor='${w[1]}'>    $LIGHTBG   </span>     </span>     </span></big>,w2theme menu light;$me")
    out2+=("<big><span bgcolor='${w[1]}'>     <span bgcolor='${w[4]}'>     <span bgcolor='${w[2]}' fgcolor='${w[-2]}'>    $DARKBG   </span>     </span>     </span></big>,w2theme menu dark;$me")
    out2+=("^sep($SYSTEM_SCHEMES)")

    n=1
    while IFS="|" read -r mbg mbga mbgt mbgta mborder mbordera tbg tbga tfg tfga tborder tbordera normbg normbga nfg nfga sbg sbga sfg sfga sborder sbordera sepfg sepfga b r p ss ibor irad a al sephal grad scheme_name
    do
    ((n=n+1))
    case "$grad" in
        none)icon="󰄱";;
        top)icon=" ";;
        right)icon=" ";;
        bottom)icon=" ";;
        left)icon="";;
        top_left)icon="";;
        top_right)icon="";;
        bottom_left)icon="";;
        bottom_right)icon="";;
    esac
    out2+=("<tt>$(printf '%-20s' "${scheme_name}")</tt><big><span bgcolor='${mbg}' fgcolor='${nfg}'>  <small>item</small>          <span bgcolor='${tbg}' fgcolor='${tfg}'> <small><b>title</b></small> </span> <span bgcolor='${sbg}' fgcolor='${sfg}'> <small>[ sel ]</small> </span>  <span bgcolor='${mbgt}'> <small>${icon}</small> </span></span></big>,jgctl applyscheme sys $n;$me")
    done < <(tail -n +2 "$SYSSCHEMES")

    out2+=("^sep($YOUR_SCHEMES)")
    out2+=("<big></big>   $SAVE_CURRSCHEME,jgctl savescheme '${currcolors}';$me")
    out2+=("<big></big>   $OPEN_SCHEMEFILE,xdg-open $USERSCHEMES")
    out2+=("^sep()")
    n=1
    while IFS="|" read -r mbg mbga mbgt mbgta mborder mbordera tbg tbga tfg tfga tborder tbordera normbg normbga nfg nfga sbg sbga sfg sfga sborder sbordera sepfg sepfga b r p ss ibor irad a al sephal grad scheme_name
    do
    ((n=n+1))
    case "$grad" in
        none)icon="󰄱";;
        top)icon=" ";;
        right)icon=" ";;
        bottom)icon=" ";;
        left)icon="";;
        top_left)icon="";;
        top_right)icon="";;
        bottom_left)icon="";;
        bottom_right)icon="";;
    esac
    out2+=("<tt>$(printf '%-20s' "${scheme_name}")</tt><big><span bgcolor='${mbg}' fgcolor='${nfg}'>  <small>item</small>          <span bgcolor='${tbg}' fgcolor='${tfg}'> <small><b>title</b></small> </span> <span bgcolor='${sbg}' fgcolor='${sfg}'> <small>[ sel ]</small> </span> <span bgcolor='${mbgt}'> <small>${icon}</small> </span></span></big>,^checkout(sch${n})")
    out3+=("^tag(sch${n}")
    out3+=("^sep($COLORSCHEME: ${scheme_name})")
    out3+=("<big></big>   $APPLY_SCHEME,jgctl applyscheme usr ${n};$me")
    out3+=("^sep($DELETE)")
    out3+=("<big>󰗨</big>    $DELETE_SCHEME ${scheme_name},jgctl delscheme ${n};$me")
    done < <(tail -n +2 "$USERSCHEMES")


### MENU
out+=("^sep(Menu)")
out+=("<tt><small>$(printf '%3s' "$MBGA")</small> <span bgcolor='$MBG' bgalpha='${MBGA/#[0]/1}%'>     </span><span bgcolor='$MBG'> </span></tt>   $COLOR_MENU_BG,^pipe(mbclr '$MBG' jgctl color_menu_bg '${COLOR_MENU_BG}' '$me')")
out+=("<tt><small>$(printf '%3s' "$MBGTA")</small> <span bgcolor='$MBGT' bgalpha='${MBGTA/#[0]/1}%'>     </span><span bgcolor='$MBGT'> </span></tt>   $COLOR_MENU_BG_TO,^pipe(mbclr '$MBGT' jgctl color_menu_bg_to '${COLOR_MENU_BG_TO}' '$me')")
if [[ "$jgtools_border" != "0" ]];then
out+=("<tt><small>$(printf '%3s' "$MBORDERA")</small> <span bgcolor='$MBORDER' bgalpha='${MBORDERA/#[0]/1}%'>     </span><span bgcolor='$MBORDER'> </span></tt>   $COLOR_MENU_BORDER,^pipe(mbclr '$MBORDER' jgctl color_menu_border '${COLOR_MENU_BORDER}' '$me')")
fi
out+=("^sep()")

case "$GRADIENT" in
    none)icon="󰄱";;
    top)icon=" ";;
    right)icon=" ";;
    bottom)icon=" ";;
    left)icon="";;
    top_left)icon="";;
    top_right)icon="";;
    bottom_left)icon="";;
    bottom_right)icon="";;
esac

out+=("<big>$icon</big>    $GRADIENT_POS 	[ <b>$icon</b> ],^checkout(gradientpos)")
out+=("<big></big>   $GRADIENT_REVERSE,jgctl gradient '${MBGT}' '${MBG}';$me")
out+=("<tt><span bgcolor='#16a084'> </span><span bgcolor='#43a480'> </span><span bgcolor='#5da97b'> </span><span bgcolor='#72ad77'> </span><span bgcolor='#84b171'> </span><span bgcolor='#95b66c'> </span><span bgcolor='#a5ba66'> </span><span bgcolor='#b5be61'> </span><span bgcolor='#c3c15a'> </span><span bgcolor='#d1c753'> </span><span bgcolor='#dfc94c'> </span><span bgcolor='#edce44'> </span><span bgcolor='#f4d03f'> </span></tt>  $PRE_GRADIENTS,^pipe(mbgrad menu)")



### ITEM
out+=("^sep($ITEM)")
out+=("<tt><small>$(printf '%3s' "$NFGA")</small> <span weight='bold' fgcolor='$NFG' fgalpha='${NFGA/#[0]/1}%'> AbCd </span></tt>   $COLOR_NORM_FG,^pipe(mbclr '$NFG' jgctl color_norm_fg '${COLOR_NORM_FG}' '$me')")
out+=("^sep()")
[[ ! -z "$NORMBG" ]] && out+=("<tt><small>$(printf '%3s' "$NORMBGA")</small> <span bgcolor='${NORMBG}' bgalpha='${NORMBGA/#[0]/1}%'>     </span><span bgcolor='${NORMBG}'> </span></tt>   $COLOR_NORM_BG,^pipe(mbclr '$NORMBG' jgctl color_norm_bg '${COLOR_NORM_BG}' '$me')" "^sep()")
out+=("$I_BORDER [ <b>$IBORDER</b> ] $I_RADIUS [ <b>$IRADIUS</b> ],^checkout(itemborder_radius)")

### SELECTED ITEM (ACCENT)
out+=("^sep($SEL_ITEM)")
out+=("<tt><small>$(printf '%3s' "$SBGA")</small> <span bgcolor='$SBG' bgalpha='${SBGA/#[0]/1}%'>     </span><span bgcolor='$SBG'> </span></tt>   $COLOR_SEL_BG,^pipe(mbclr '$SBG' jgctl color_sel_bg '${COLOR_SEL_BG}' '$me')")
out+=("<tt><small>$(printf '%3s' "$SFGA")</small> <span weight='bold' bgcolor='$SBG' bgalpha='${SBGA/#[0]/1}%' fgcolor='$SFG' fgalpha='${SFGA/#[0]/1}%'> AbCd </span></tt>   $COLOR_SEL_FG,^pipe(mbclr '$SFG' jgctl color_sel_fg '${COLOR_SEL_FG}' '$me')")
if [[ "$IBORDER" != "0" ]];then
out+=("<tt><small>$(printf '%3s' "$SBORDERA")</small> <span bgcolor='$SBORDER' bgalpha='${SBORDERA/#[0]/1}%'>     </span><span bgcolor='$SBORDER'> </span></tt>   $COLOR_SEL_BORDER,^pipe(mbclr '$SBORDER' jgctl color_sel_border '${COLOR_SEL_BORDER}' '$me')")
fi
out+=("^sep()")
out+=("Apply <big><span bgcolor='${SBG}' fgcolor='${SFG}'>     accent     </span></big> preset,^checkout(sel_accents)")

    out2+=("^tag(sel_accents)")
    out2+=("^sep(Accent presets)")
    while IFS="," read -r BG FG BGNAME FGNAME
    do
    [[ "$BGNAME" == "" ]] && BGNAME=${BG}
    [[ "$FGNAME" == "" ]] && FGNAME=${FG}
    out2+=("<big><span bgcolor='${FG}'>    <span bgcolor='${BG}' fgcolor='${FG}'><small><tt>$(printf '%*s' 25 "${FGNAME} on ${BGNAME}")</tt></small>   </span> </span></big>,jgctl accent '${BG}' '${FG}';$me")
    out21+=("<big><span bgcolor='${BG}'>    <span bgcolor='${FG}' fgcolor='${BG}'><small><tt>$(printf '%*s' 25 "${BGNAME} on ${FGNAME}")</tt></small>   </span> </span></big>,jgctl accent '${FG}' '${BG}';$me")
    done < <(tail -n +2 /usr/share/mabox-colorizer/readable_colors.csv)
    out2+=("${out21[@]}")

### TITLE/SEPARATOR
out+=("^sep($SEPARATOR_TITLE)")
out+=("<tt><small>$(printf '%3s' "$TBGA")</small> <span bgcolor='$TBG' bgalpha='${TBGA}%'>     </span><span bgcolor='$TBG'> </span></tt>   $COLOR_TITLE_BG,^pipe(mbclr '$TBG' jgctl color_title_bg '${COLOR_TITLE_BG}' '$me')")
out+=("<tt><small>$(printf '%3s' "$TFGA")</small> <span weight='bold' bgcolor='$TBG' bgalpha='${TBGA/#[0]/1}%' fgcolor='$TFG' fgalpha='${TFGA}%'> AbCd </span></tt>   $COLOR_TITLE_FG,^pipe(mbclr '$TFG' jgctl color_title_fg '${COLOR_TITLE_FG}' '$me')")
out+=("<tt><small>$(printf '%3s' "$TBORDERA")</small> <span bgcolor='$TBORDER' bgalpha='${TBORDERA/#[0]/1}%'>     </span><span bgcolor='$TBORDER'> </span></tt>   $COLOR_TITLE_BORDER,^pipe(mbclr '$TBORDER' jgctl color_title_border '${COLOR_TITLE_BORDER}' '$me')")
out+=("^sep()")

case "$SEPHALIGN" in
    left) icon="";;
    center) icon="";;
    right) icon=" ";;
esac

out+=("<big>$icon</big>   $SEP_HALIGN 	[ <b>$SEPHALIGN</b> ],^checkout(sephalign)")
out+=("^sep()")
out+=("<tt><small>$(printf '%3s' "$SEPFGA")</small> <span fgcolor='$SEPFG' fgalpha='${SEPFGA/#[0]/1}%'>------</span></tt>   ${COLOR_SEP_FG},^pipe(mbclr '$SEPFG' jgctl color_sep_fg '${COLOR_SEP_FG}' '$me')")



# FONTS
out+=("^sep($FONTS)")
out+=("<big>󰛖</big>   $TITLE [ <b>$menu_sep_font_family $menu_sep_font_size</b> ],^checkout(mtitlefont)")
out+=("<big>󰛖</big>   $ITEM [ <b>$menu_font_family $menu_font_size</b> ],^checkout(mitemfont)")
    
    # Item font submenu
    out2+=("^tag(mitemfont)")
    out2+=("^sep($ITEM_FONT)")
    out2+=("<big>󰛖</big>   $FONT_CUSTOM,mb-setfont menu_item;$me")
    out2+=("^sep($FONT_SIZE)")
    out2+=("<big>󰧴</big>   $INCREASE <b>$((menu_font_size+1)) px</b>,mb-setvar menu_font_size=$((menu_font_size+1));$me")
    out2+=("<big>󰧳</big>   $DECREASE <b>$((menu_font_size-1)) px</b>,mb-setvar menu_font_size=$((menu_font_size-1));$me")
    out2+=("^sep()")
    sizes=(14 13 12 11 10 9 8)
    for i in "${sizes[@]}"
        do
        [[ "$menu_font_size" == "$i" ]] && out2+=("<big>${ron}</big>  <b>$i px</b>,$me") || out2+=("<big>${roff}</big>  $i px,mb-setvar menu_font_size=$i;$me")
    done

    if [ -f "$HOME/.config/mabox/fonts.list" ];then
                mapfile -t favfonts < <( grep -vE "^($|#)" ~/.config/mabox/fonts.list)
    else
                mapfile -t favfonts < <( grep -vE "^($|#)" /usr/share/mabox-colorizer/fonts.list)
                cp /usr/share/mabox-colorizer/fonts.list ~/.config/mabox/
    fi
      
    if [ "${#favfonts[@]}" -gt 0 ];then
        out2+=("^sep($FONT_FAMILY)")
        for fon in "${favfonts[@]}";do
        [[ "$menu_font_family" == "$fon" ]] && out2+=("<big>${ron}</big>  <span font_family=\"${fon}\">${fon}</span>,$me") || out2+=("<big>${roff}</big>  <span font_family=\"${fon}\">${fon}</span>,mb-setvar \"menu_font_family='${fon}'\";$me")
        done
    fi

    out2+=("^tag(mtitlefont)")
    out2+=("^sep($TITLE_FONT)")
    out2+=("<big>󰛖</big>   $FONT_CUSTOM,mb-setfont menu_sep;$me")

    out2+=("^sep($FONT_SIZE)")
    out2+=("<big>󰧴</big>   $INCREASE <b>$((menu_sep_font_size+1)) px</b>,mb-setvar menu_sep_font_size=$((menu_sep_font_size+1));$me")
    out2+=("<big>󰧳</big>   $DECREASE <b>$((menu_sep_font_size-1)) px</b>,mb-setvar menu_sep_font_size=$((menu_sep_font_size-1));$me")
    out2+=("^sep()")
    sizes=(14 13 12 11 10 9 8)
    for i in "${sizes[@]}"
        do
        [[ "$menu_sep_font_size" == "$i" ]] && out2+=("<big>${ron}</big>  <b>$i px</b>,$me") || out2+=("<big>${roff}</big>  $i px,mb-setvar menu_sep_font_size=$i;$me")
    done

    if [ "${#favfonts[@]}" -gt 0 ];then
        out2+=("^sep($FONT_FAMILY)")
        for fon in "${favfonts[@]}";do
        [[ "$menu_sep_font_family" == "$fon" ]] && out2+=("<big>${ron}</big>  <span font_family=\"${fon}\">${fon}</span>,$me") || out2+=("<big>${roff}</big>  <span font_family=\"${fon}\">${fon}</span>,mb-setvar \"menu_sep_font_family='${fon}'\";$me")
        done
    fi




out2+=("^tag(gradientpos)")
out2+=("^sep($GRADIENT_POS <small>$GRADIENT</small>)")
out2+=("󰄱   $NONE,jgctl menu_gradient_pos none;$me")
out2+=("^sep()")
out2+=("    $TOP,jgctl menu_gradient_pos top;$me")
out2+=("    $RIGHT,jgctl menu_gradient_pos right;$me")
out2+=("    $BOTTOM,jgctl menu_gradient_pos bottom;$me")
out2+=("    $LEFT,jgctl menu_gradient_pos left;$me")
out2+=("    $TOP_LEFT,jgctl menu_gradient_pos top_left;$me")
out2+=("   $TOP_RIGHT,jgctl menu_gradient_pos top_right;$me")
out2+=("   $BOTTOM_LEFT,jgctl menu_gradient_pos bottom_left;$me")
out2+=("   $BOTTOM_RIGHT,jgctl menu_gradient_pos bottom_right;$me")

out2+=("^tag(sephalign)")
out2+=("^sep($SEP_HALIGN)")
[[ "$SEPHALIGN" == "left" ]] && out2+=("<big>${ron}</big>      <b>$H_LEFT</b>,jgctl sep_halign left;$me") || out2+=("<big>${roff}</big>      $H_LEFT,jgctl sep_halign left;$me")
[[ "$SEPHALIGN" == "center" ]] && out2+=("<big>${ron}</big>      <b>$H_CENTER</b>,jgctl sep_halign center;$me") || out2+=("<big>${roff}</big>      $H_CENTER,jgctl sep_halign center;$me")
[[ "$SEPHALIGN" == "right" ]] && out2+=("<big>${ron}</big>       <b>$H_RIGHT</b>,jgctl sep_halign right;$me") || out2+=("<big>${roff}</big>       $H_RIGHT,jgctl sep_halign right;$me")
out2+=("^tag(itemborder_radius)")
out2+=("^sep($ITEM_BORDER)")
[[ "$IBORDER" == 0 ]] && out2+=("<big>${ron}</big>   <b>0 px</b>,jgctl item_border 0;$me") || out2+=("<big>${roff}</big>   0 px,jgctl item_border 0;$me")
out2+=("^sep()")
[[ "$IBORDER" == 1 ]] && out2+=("<big>${ron}</big>   <b>1 px</b>,jgctl item_border 1;$me") || out2+=("<big>${roff}</big>   1 px,jgctl item_border 1;$me")
[[ "$IBORDER" == 2 ]] && out2+=("<big>${ron}</big>   <b>2 px</b>,jgctl item_border 2;$me") || out2+=("<big>${roff}</big>   2 px,jgctl item_border 2;$me")

out2+=("^sep($ITEM_RADIUS)")
[[ "$IRADIUS" == 0 ]] && out2+=("<big>${ron}</big>   <b>0 px</b>,jgctl item_radius 0;$me") || out2+=("<big>${roff}</big>   0 px,jgctl item_radius 0;$me")
out2+=("^sep()")
[[ "$IRADIUS" == 1 ]] && out2+=("<big>${ron}</big>   <b>1 px</b>,jgctl item_radius 1;$me") || out2+=("<big>${roff}</big>   1 px,jgctl item_radius 1;$me")
[[ "$IRADIUS" == 2 ]] && out2+=("<big>${ron}</big>   <b>2 px</b>,jgctl item_radius 2;$me") || out2+=("<big>${roff}</big>   2 px,jgctl item_radius 2;$me")
[[ "$IRADIUS" == 3 ]] && out2+=("<big>${ron}</big>   <b>3 px</b>,jgctl item_radius 3;$me") || out2+=("<big>${roff}</big>   3 px,jgctl item_radius 3;$me")
[[ "$IRADIUS" == 4 ]] && out2+=("<big>${ron}</big>   <b>4 px</b>,jgctl item_radius 4;$me") || out2+=("<big>${roff}</big>   4 px,jgctl item_radius 4;$me")
[[ "$IRADIUS" == 5 ]] && out2+=("<big>${ron}</big>   <b>5 px</b>,jgctl item_radius 5;$me") || out2+=("<big>${roff}</big>   5 px,jgctl item_radius 5;$me")
[[ "$IRADIUS" == 6 ]] && out2+=("<big>${ron}</big>   <b>6 px</b>,jgctl item_radius 6;$me") || out2+=("<big>${roff}</big>   6 px,jgctl item_radius 6;$me")


#out+=("^sep($MORE_MENU_SETTINGS)")
#out+=("   $GLOBAL_MENU_SETTINGS,jgmenusettings-pipe -c")
#out+=("$GLOBAL_MENU_SETTINGS,^pipe(jgmenusettings-pipe -r)")

### RUN
if [[ "$1" == "-s" ]]; then
    
    CNF_DIR="$HOME/.config/colorizer"
    CNF_FILE="$CNF_DIR/colorizer.conf"
    source "$CNF_FILE"

    out+=("^sep()")
    out+=(" ${arrow_string_left}    $_COLORIZER_ROOT,colorizer -s")
    out+=(" ${arrow_string_left} ${arrow_string_left}    $_LEFTSIDEPANEL,mb-jgtools places")

    if [[ "$colorizer_size" == "full" ]];then
    eval $(xdotool getdisplaygeometry --shell)
    MENU_HEIGHT_MIN="$HEIGHT"
    MENU_HEIGHT_MAX=$MENU_HEIGHT_MIN
    jgtools_radius=0
    menu_margin_x="0"
    else
    MENU_VALIGN="center"
    menu_margin_x=${submenu_spacing:-0}
    fi
     
    MENU_PADDING_TOP=${jgtools_padding:-0}
    MENU_HALIGN="left"
    jgmenu_icon_size=0
    JGWIDTH=40

    [ $(pidof picom) ] && MENU_RADIUS=$jgtools_radius
    [ -z $jgmenu_use_borders ] && menu_border=0
JGWIDTH=$((jgtools_padding + 270 + jgtools_padding))
    MENU_PADDING_TOP=$((jgtools_padding + 152))
    #WALLPAPER
    read WALLPATH<<< $(grep file "$HOME"/.config/nitrogen/bg-saved.cfg |  tail -1 | cut -d'=' -f2)
    THUMBDIR="$HOME/.cache/colorizer/thumbs"
    mkdir -p ${THUMBDIR}
    NAME=${WALLPATH////_}
    if [[ "${NAME}" =~ ^_home_.* ]]; then
        n=${#HOME}
        ((n++))
        NAME=${NAME:${n}}
    fi
    THUMB="${THUMBDIR}/${NAME}.png"
    if [[ ! -f "$THUMB" ]]
        then
        convert ${WALLPATH} -resize 270x150^ -gravity center -extent 270x150 ${THUMB}
    fi
    
    mkconfigfile

cat <<EOF > ${MENU_ITEMS}
@icon,,$((jgtools_padding )),$((jgtools_padding)),270,150,4,left,top,,,${THUMB}

@rect,,$((jgtools_padding+4)),$((jgtools_padding + 116)),262,30,0,left,top,#222222 20,#222222 70,
@text,,$((jgtools_padding + 154)),$((jgtools_padding + 116)),120,30,0,left,top,#FFFFFF ,${WINCLR},<span size='10400' font_family='Ubuntu'><b>Colorizer</b> Menus</span>
@rect,,$((jgtools_padding + 8)),$((jgtools_padding + 22)),35,80,2,left,top,${MBORDER} ${MBORDERA},${MBG} ${MBGA},
@rect,,$((jgtools_padding + 44)),$((jgtools_padding + 72)),35,60,2,left,top,${MBORDER} ${MBORDERA},${MBG} ${MBGA},
$(printf '%s\n' "${out[@]}")
$(printf '%s\n' "${out2[@]}")
$(printf '%s\n' "${out3[@]}")
EOF

    jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null
    exit 0
fi
printf '%s\n' "${out[@]}"
printf '%s\n' "${out2[@]}"
printf '%s\n' "${out3[@]}"
