#!/usr/bin/env bash

# Print out escape sequences usable for coloured text on tty.
# shellcheck disable=2016
printf 'Colour escapes are %s\n' '\e[${value};...;${value}m'
printf 'Values 30..37 are \e[33mforeground colours\e[m\n'
printf 'Values 40..47 are \e[43mbackground colours\e[m\n'
printf 'Value  1 gives a  \e[1mbold look\e[m\n'
printf 'Value  2 gives a  \e[2mdim look\e[m\n'
printf 'Value  3 gives a  \e[3mitalic look\e[m\n'
printf 'Value  4 gives a  \e[4munderlined look\e[m\n'
printf 'Value  5 gives a  \e[5mblinking look\e[m\n\n'

# foreground colours
for fgc in {30..37}; do
	# background colours
	for bgc in {40..47}; do
		fgc=${fgc#37} # white
		bgc=${bgc#40} # black

		vals="${fgc:+$fgc};${bgc}"
		vals=${vals%%;}

		seq0="${vals:+\e[${vals}m}"
		printf " %-9s" "${seq0:-(default)}"
		echo -en " ${seq0}TEXT\e[m"
		echo -en " \e[${vals:+${vals+$vals}};1mBOLD\e[m"
		echo -en " \e[${vals:+${vals+$vals}};2mDIM\e[m"
		echo -en " \e[${vals:+${vals+$vals}};3mITA\e[m"
		echo -en " \e[${vals:+${vals+$vals}};4mUND\e[m"
		echo -en " \e[${vals:+${vals+$vals}};5mBLI\e[m"
	done
	echo; echo
done

rainbowColor() {
	local h=$(($1 / 43))
	local f=$(($1 - 43 * h))
	local t=$((f * 255 / 43))
	local q=$((255 - t))

	if [ $h -eq 0 ]
	then
		echo "255 $t 0"
	elif [ $h -eq 1 ]
	then
		echo "$q 255 0"
	elif [ $h -eq 2 ]
	then
		echo "0 255 $t"
	elif [ $h -eq 3 ]
	then
		echo "0 $q 255"
	elif [ $h -eq 4 ]
	then
		echo "$t 0 255"
	elif [ $h -eq 5 ]
	then
		echo "255 0 $q"
	else
		# execution should never reach here
		echo '0 0 0'
	fi
}

rf(){ echo "$1" 0 0; }; gf(){ echo 0 "$1" 0; }; bf(){ echo 0 0 "$1"; }
for f in rf gf bf rainbowColor; do
	for s in "$(seq 0 127)" "$(seq 255 -1 128)"; do
		for i in $s; do
			# shellcheck disable=2183,2046
			printf '\x1b[48;2;%s;%s;%sm ' $($f "$i")
		done
		echo -en "\x1b[0m\n"
	done
done