#!/bin/bash

# cavactl - cava colorizer script for Mabox
CFGFILE=~/.config/cava/config

reload_config() {
pkill -USR1 cava	
}

reload_colors() {
pkill -USR2 cava > /dev/null 2>&1	
}
mode() {
		case "$1" in
		solid) sd "^gradient .*" "gradient = 0" ${CFGFILE};;
		gradient) sd "^gradient .*" "gradient = 1" ${CFGFILE};;
		esac
		#reload_colors
        reload_config
}

foregroundcolor(){
	sd "^foreground .*" "foreground = '${1}'" ${CFGFILE}
}

foreground() {
sd "^foreground .*" "foreground = '${1}'" ${CFGFILE}
sd "^gradient .*" "gradient = 0" ${CFGFILE}
reload_config
}
gradientcolors() {
		n=1
for i in $(pastel gradient -n 3 ${1} ${2}|pastel format hex)
    do
        sd ".*gradient_color_${n}.*" "gradient_color_${n} = '${i}'" ${CFGFILE}
        ((n++)) 
    done
}
gradient() {
	n=1
for i in $(pastel gradient -n 3 ${1} ${2}|pastel format hex)
    do
        sd ".*gradient_color_${n}.*" "gradient_color_${n} = '${i}'" ${CFGFILE}
        ((n++)) 
    done
	
sd ".*gradient .*" "gradient = 1" ${CFGFILE}
sd ".*gradient_count .*" "gradient_count = 3" ${CFGFILE}
reload_config
}
grad_from() {
  read GR_TO <<< "$(grep '.*gradient_color_3 ' ${CFGFILE} | cut -d"'" -f2)"
  gradient "$1" "${GR_TO}"
}
grad_to() {
  read GR_FROM <<< "$(grep '.*gradient_color_1 ' ${CFGFILE} | cut -d"'" -f2)"
  gradient "${GR_FROM}" "$1" 
}

bar_width () {
sd ".*bar_width .*" "bar_width = ${1}" ${CFGFILE}	
reload_config
}


bar_spacing() {
sd ".*bar_spacing .*" "bar_spacing = ${1}" ${CFGFILE}
reload_config
}

framerate () {
sd "^framerate .*" "framerate = ${1}" ${CFGFILE}
reload_config 
}

noise_reduction () {
sd "^noise_reduction .*" "noise_reduction = ${1}" ${CFGFILE}
reload_config 
}

resetcfg () {
cat /usr/share/mabox/common/cava/config > ${CFGFILE}
reload_config 
}
start () {
   case "$1" in
   full|half|third)
   mb-setvar cava_width=${1}
   ;;
   200|100|50)
   mb-setvar cava_height=${1}
   ;;
   esac
   stop
   transparent-cava &2>/dev/null 
}
stop () {
    pkill -f cavatransparent 
}

info () {
case "$LANG" in
	pl*)
    INFO_HEAD="Porady dla Cava"
    INFO_TXT="\nCava jest uruchomiona w przezroczystym oknie...\n\
Możesz je więc <b>przesuwać</b> lub <b>zmieniać rozmiar</b> tak jak każde inne okno\n\
<i>Przesuwanie</i>: przytrzymaj <b>Alt</b> i przeciągnij\n\
<i>Zmiana rozmiaru</i>: przytrzymaj <b>Alt</b> i przeciągnij prawym przyciskiem myszy\n\n    \
Użyj strzałek <b> </b>, aby zmienić szerokość słupków"
	;;
	*)
	INFO_HEAD="Cava tips & tricks"
    INFO_TXT="\nCava runs inside transparent window...\n\
So you can <b>move</b> or <b>resize</b> it like any other window\n\
<i>Move</i>: hold <b>Alt</b> and drag\n\
<i>Resize</i>: hold <b>Alt</b> and drag with right mouse button\n\n    \
Use arrows <b> </b> to change bar width"
	;;
esac
notify-send.sh -i amarok_playcount -u critical "$INFO_HEAD" "$INFO_TXT"
}

case "$1" in
	mode) mode "$2";;
	foregroundcolor) foregroundcolor "$2";;
	foreground) foreground "$2";;
	gradientcolors) gradientcolors "$2" "$3";;
	gradient) gradient "$2" "$3";;
	grad_from) grad_from "$2";;
	grad_to) grad_to "$2";;
	reload) reload_config;;
	reload_colors)reload_colors;;
	bar_width)bar_width "$2";;
	bar_spacing)bar_spacing "$2";;
    framerate)framerate "$2";;
    noise_reduction)noise_reduction "$2";;
    resetcfg)resetcfg;;
    start) start "$2";;
    stop) stop;;
	info) info;;
	*):;;
esac
