#!/bin/bash

daemonconfigfile=/etc/argononed.conf
unitconfigfile=/etc/argonunits.conf
fanmode="CPU"

if [ "$1" == "hdd" ]
then
	daemonconfigfile=/etc/argononed-hdd.conf
	fanmode="HDD"
fi

if [ -f "$unitconfigfile" ]
then
	. $unitconfigfile
fi

if [ -z "$temperature" ]
then
	temperature="C"
fi

echo "------------------------------------------"
echo " Argon Fan Speed Configuration Tool ($fanmode)"
echo "------------------------------------------"
echo "WARNING: This will remove existing configuration."
echo -n "Press Y to continue:"
read -n 1 confirm
echo


fanloopflag=1
newmode=0
if [ "$confirm" = "y" ]
then
	confirm="Y"
fi

if [ "$confirm" != "Y" ]
then
	fanloopflag=0
	echo "Cancelled."
else
	echo "Thank you."
fi

get_number () {
	read curnumber
	if [ -z "$curnumber" ]
	then
		echo "-2"
		return
	elif [[ $curnumber =~ ^[+-]?[0-9]+$ ]]
	then
		if [ $curnumber -lt 0 ]
		then
			echo "-1"
			return
		elif [ $curnumber -gt 212 ]
		then
			# 212F = 100C
			echo "-1"
			return
		fi
		echo $curnumber
		return
	fi
	echo "-1"
	return
}

while [ $fanloopflag -eq 1 ]
do
	echo
	echo "Select fan mode:"
	echo "  1. Always on"
	if [ "$fanmode" == "HDD" ]
	then
		if [ "$temperature" == "C" ]
		then
			echo "  2. Adjust to temperatures (35C, 40C, and 45C)"
		else
			echo "  2. Adjust to temperatures (95F, 104F, and 113F)"
		fi
	else
		if [ "$temperature" == "C" ]
		then
			echo "  2. Adjust to temperatures (55C, 60C, and 65C)"
		else
			echo "  2. Adjust to temperatures (130F, 140F, and 150F)"
		fi
	fi
	echo "  3. Customize temperature cut-offs"
	echo
	echo "  0. Exit"
	echo "NOTE: You can also edit $daemonconfigfile directly"
	echo -n "Enter Number (0-3):"
	newmode=$( get_number )

	if [[ $newmode -eq 0 ]]
	then
		fanloopflag=0
	elif [ $newmode -eq 1 ]
	then
		echo "#" > $daemonconfigfile
		echo "# Argon Fan Speed Configuration $fanmode" >> $daemonconfigfile
		echo "#" >> $daemonconfigfile
		echo "# Min Temp=Fan Speed" >> $daemonconfigfile

		errorfanflag=1
		while [ $errorfanflag -eq 1 ]
		do
			echo -n "Please provide fan speed (30-100 only):"

			curfan=$( get_number )
			if [ $curfan -ge 30 ]
			then
				errorfanflag=0
			elif [ $curfan -gt 100 ]
			then
				errorfanflag=0
			fi
		done

		echo "1="$curfan >> $daemonconfigfile
		sudo systemctl restart argononed.service
		echo "Fan always on."
	elif [ $newmode -eq 2 ]
	then
		echo "#" > $daemonconfigfile
		echo "# Argon Fan Speed Configuration $fanmode" >> $daemonconfigfile
		echo "#" >> $daemonconfigfile
		echo "# Min Temp=Fan Speed" >> $daemonconfigfile

		echo "Please provide fan speeds for the following temperatures:"
		curtemp=55
		maxtemp=70
		if [ "$fanmode" == "HDD" ]
		then
			curtemp=30
			maxtemp=60
		fi
		while [ $curtemp -lt $maxtemp ]
		do
			errorfanflag=1
			while [ $errorfanflag -eq 1 ]
			do
				displaytemp=$curtemp
				if [ "$temperature" == "F" ]
				then
					# Convert C to F
					displaytemp=$((($curtemp*9/5)+32))
				fi
				echo -n ""$displaytemp"$temperature (30-100 only):"

				curfan=$( get_number )
				if [ $curfan -ge 30 ]
				then
					errorfanflag=0
				elif [ $curfan -gt 100 ]
				then
					errorfanflag=0
				fi
			done
			echo $curtemp"="$curfan >> $daemonconfigfile
			curtemp=$((curtemp+5))
		done

		sudo systemctl restart argononed.service
		echo "Configuration updated."
	elif [ $newmode -eq 3 ]
	then
		echo "Please provide fan speeds and temperature pairs"
		echo

		subloopflag=1
		paircounter=0
		while [ $subloopflag -eq 1 ]
		do
			errortempflag=1
			errorfanflag=1
			echo "(You may set a blank value to end configuration)"
			while [ $errortempflag -eq 1 ]
			do
				echo -n "Provide minimum temperature of $fanmode (in $temperature) then [ENTER]:"

				curtemp=$( get_number )
				if [ $curtemp -ge 0 ]
				then
					errortempflag=0
				elif [ $curtemp -eq -2 ]
				then
					# Blank
					errortempflag=0
					errorfanflag=0
					subloopflag=0
				fi
			done
			while [ $errorfanflag -eq 1 ]
			do
				echo -n "Provide fan speed for "$curtemp"$temperature (30-100) then [ENTER]:"
				curfan=$( get_number )
				if [ $curfan -ge 30 ]
				then
					errorfanflag=0
				elif [ $curfan -gt 100 ]
				then
					errorfanflag=0
				elif [ $curfan -eq -2 ]
				then
					# Blank
					errortempflag=0
					errorfanflag=0
					subloopflag=0
				fi
			done
			if [ $subloopflag -eq 1 ]
			then
				if [ $paircounter -eq 0 ]
				then
					echo "#" > $daemonconfigfile
					echo "# Argon Fan Configuration" >> $daemonconfigfile
					echo "#" >> $daemonconfigfile
					echo "# Min Temp=Fan Speed" >> $daemonconfigfile
				fi

				displaytemp=$curtemp
				paircounter=$((paircounter+1))
				if [ "$temperature" == "F" ]
				then
					# Convert to F to C
					curtemp=$((($curtemp-32)*5/9))
				fi
				echo $curtemp"="$curfan >> $daemonconfigfile

				echo "* Fan speed will be set to "$curfan" once $fanmode temperature reaches "$displaytemp"$temperature"
				echo
			fi
		done

		echo
		if [ $paircounter -gt 0 ]
		then
			echo "Thank you!  We saved "$paircounter" pairs."
			sudo systemctl restart argononed.service
			echo "Changes should take effect now."
		else
			echo "Cancelled, no data saved."
		fi
	fi
done

echo