#!/bin/bash

#############################################################
# Zenity interface for G203 (Prodigy & Ligthsync) driver    #
# Last change: 28-03-2021                                   #
# Author: q3aql                                             #
# Contact: q3aql@protonmail.ch                              #
# License: GPL v2.0                                         #
#############################################################
VERSION="1.0"
M_DATE="060721"

# Variables
iconPath="/usr/share/icons/logitech/logitech-black.png"

# Function to check admin rights.
function rootMessage() {
  mkdir -p /etc/root &> /dev/null
  administrador=$?
  if [ ${administrador} -eq 0 ] ; then
    rm -rf /etc/root
  else
    zenity --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --window-icon=${iconPath} --warning \
    --width=340 --text "Administrator permissions are required"
    echo ""
    echo "* zenidrv-g203-prodigy ${VERSION} (${M_DATE}) (GPL v2.0)"
    echo ""
    echo "* Administrator permissions are required"
    echo ""
    exit
  fi
}

# Show menu with options.
showMenu=0
rootMessage
while [ ${showMenu} -eq 0 ] ; do
  clear
  opcion=$(zenity --width=280 --height=330 --list --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" \
  --window-icon=${iconPath} --column "Select effect or option :" "Solid" "Cycle" "Breathe" "Intro (On)" "Intro (Off)" "Set DPI" \
  "Light off" "Exit")
  if [ "${opcion}" == "Solid" ] ; then
    color_selected=$(zenity --width=260 --height=520 --list --title "zenidrv-g203-lightsync ${VERSION} ($M_DATE)" \
  --window-icon=${iconPath} --column "Select color from list :" "Black" "White" "Red" "Lime" "Blue" "Yellow" "Cyan" "Magenta" \
  "Silver" "Gray" "Maroon" "Olive" "Green" "Purple" "Teal" "Navy" )
    if [ "${color_selected}" == "Black" ] ; then
      color_apply="000000"
    elif [ "${color_selected}" == "White" ] ; then
      color_apply="FFFFFF"
    elif [ "${color_selected}" == "Red" ] ; then
      color_apply="FF0000"
    elif [ "${color_selected}" == "Lime" ] ; then
      color_apply="00FF00"
    elif [ "${color_selected}" == "Blue" ] ; then
      color_apply="0000FF"
    elif [ "${color_selected}" == "Yellow" ] ; then
      color_apply="FFFF00"
    elif [ "${color_selected}" == "Cyan" ] ; then
      color_apply="00FFFF"
    elif [ "${color_selected}" == "Magenta" ] ; then
      color_apply="FF00FF"
    elif [ "${color_selected}" == "Silver" ] ; then
      color_apply="C0C0C0"
    elif [ "${color_selected}" == "Gray" ] ; then
      color_apply="808080"
    elif [ "${color_selected}" == "Maroon" ] ; then
      color_apply="800000"
    elif [ "${color_selected}" == "Olive" ] ; then
      color_apply="808000"
    elif [ "${color_selected}" == "Green" ] ; then
      color_apply="008000"
    elif [ "${color_selected}" == "Purple" ] ; then
      color_apply="800080"
    elif [ "${color_selected}" == "Teal" ] ; then
      color_apply="008080"
    elif [ "${color_selected}" == "Navy" ] ; then
      color_apply="000080"
    fi
    sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Applying Solid effect" \
    --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py solid "${color_apply}"
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
    color_apply="none"
  elif [ "${opcion}" == "Cycle" ] ; then
  sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Applying Cycle effect" \
  --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py cycle
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
  elif [ "${opcion}" == "Breathe" ] ; then
    color_selected=$(zenity --width=260 --height=520 --list --title "zenidrv-g203-lightsync ${VERSION} ($M_DATE)" \
  --window-icon=${iconPath} --column "Select color from list :" "Black" "White" "Red" "Lime" "Blue" "Yellow" "Cyan" "Magenta" \
  "Silver" "Gray" "Maroon" "Olive" "Green" "Purple" "Teal" "Navy" )
    if [ "${color_selected}" == "Black" ] ; then
      color_apply="000000"
    elif [ "${color_selected}" == "White" ] ; then
      color_apply="FFFFFF"
    elif [ "${color_selected}" == "Red" ] ; then
      color_apply="FF0000"
    elif [ "${color_selected}" == "Lime" ] ; then
      color_apply="00FF00"
    elif [ "${color_selected}" == "Blue" ] ; then
      color_apply="0000FF"
    elif [ "${color_selected}" == "Yellow" ] ; then
      color_apply="FFFF00"
    elif [ "${color_selected}" == "Cyan" ] ; then
      color_apply="00FFFF"
    elif [ "${color_selected}" == "Magenta" ] ; then
      color_apply="FF00FF"
    elif [ "${color_selected}" == "Silver" ] ; then
      color_apply="C0C0C0"
    elif [ "${color_selected}" == "Gray" ] ; then
      color_apply="808080"
    elif [ "${color_selected}" == "Maroon" ] ; then
      color_apply="800000"
    elif [ "${color_selected}" == "Olive" ] ; then
      color_apply="808000"
    elif [ "${color_selected}" == "Green" ] ; then
      color_apply="008000"
    elif [ "${color_selected}" == "Purple" ] ; then
      color_apply="800080"
    elif [ "${color_selected}" == "Teal" ] ; then
      color_apply="008080"
    elif [ "${color_selected}" == "Navy" ] ; then
      color_apply="000080"
    fi
    sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Applying Breathe effect" \
    --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py breathe "${color_apply}"
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
    color_apply="none"
  elif [ "${opcion}" == "Intro (On)" ] ; then
    sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Enabling startup effect" \
    --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py intro on
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
  elif [ "${opcion}" == "Intro (Off)" ] ; then
    sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Disabling startup effect" \
    --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py intro off
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
  elif [ "${opcion}" == "Set DPI" ] ; then
    dpi_number=$(zenity --entry --title "Set DPI (from 200 to 8000)" --window-icon=${iconPath} --text "Enter DPI number (from 200 to 8000):" --entry-text "800")
    sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Setting DPI to ${dpi_number}" \
    --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py dpi ${dpi_number}
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
  elif [ "${opcion}" == "Light off" ] ; then
    sleep 2 | zenity --progress --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --text "Turning off the light on the mouse" \
    --window-icon=${iconPath} --pulsate --no-cancel --auto-close
    g203-led.py breathe 00FFFF 1000 0
    device_error=$?
    if [ ${device_error} -eq 0 ] ; then
      echo > /dev/null
    else
      zenity --title "zenidrv-g203-prodigy ${VERSION} ($M_DATE)" --error --window-icon=${iconPath} --width=280 \
      --text "Device not found or connected"
    fi
  elif [ "${opcion}" == "Exit" ] ; then
    showMenu=1
  else
    zenity --title "zenidrv-g203-prodigy ${VERSION} (${M_DATE})" --window-icon=${iconPath} --warning \
    --width=300 --text "Choose one of the menu options"
  fi
done