L=({A..Z})
ToAA() { AA= ; local i=$1 ; (($i == 0)) && AA='@' ; while ((i)) ; do AA="${L[((--i % 26))]}$AA" ; ((i /= 26)) ; done ; }


st()
{
cat <<EOF
color "type=DEFAULT fg=WHITE bg=DEFAULT_COLOR"
color "type=HEADINGS fg=CYAN bg=BLACK bold=0"
color "type=HEADINGS_ODD fg=CYAN bg=BLACK bold=0"
color "type=CELL_SELECTION bg=CYAN fg=WHITE bold=0"
color "type=CELL_SELECTION_SC bg=CYAN fg=WHITE"
color "type=STRG fg=WHITE bg=DEFAULT_COLOR bold=0"

freeze A
format A 30 0 0
cellcolor A0 "bg=BLACK fg=YELLOW bold=1"
# leftstring A0 = "+/- to change"
goto B1

EOF

readarray -t all_tags < <(tmsu tags -1 --name=never $PWD/* | sed -e '/^$/d' | sort -u)

column=1
for tag in "${all_tags[@]}"
	do
		((column++)) ; ToAA $column ; ((tag_length = ${#tag} + 2)) ; echo -e "format $AA $tag_length 0 0\nlabel ${AA}0 = \"$tag\""

	done

readarray -t files_and_tags < <(shopt -s dotglob ; tmsu tags $PWD/* 2>&-)

declare -A lookup

row=0
for file_and_tag in "${files_and_tags[@]}"
	do
		((row++))
		
		declare -A file_tags=()
		file_tag_array=($file_and_tag)
		for tag in "${file_tag_array[@]:1}" ; do file_tags[$tag]="$tag" ; done
		
		file="${file_tag_array%%:}"
		echo "leftstring A$row = \"${file##*/}\""
		
		column=1
		for tag in "${all_tags[@]}"
			do 
				((column++)) ; ToAA $column
				
				lu_tag="> let $AA$row = 1"
				lookup[$lu_tag]="tmsu tag $file $tag"
				
				lu_untag="> let $AA$row = 0"
				lookup[$lu_untag]="tmsu untag $file $tag"
				
				[[ -n "${file_tags[$tag]}" ]] && { echo "cellcolor $AA$row \"fg=BLACK bg=WHITE\"" ; echo "let $AA$row = 1" ; } || echo "let $AA$row = 0"
			done
	done

declare -p lookup &>"$1"
}


mkdir -p /tmp/ftl/
scim_tmsu_file="$(mktemp /tmp/ftl/scim_tmsu_XXXXXXX)" 

st "${scim_tmsu_file}_lookup" | tee "${scim_tmsu_file}_original.sc" >"${scim_tmsu_file}_new.sc"

sc-im "${scim_tmsu_file}_new.sc"

source "${scim_tmsu_file}_lookup"

while read -r tmsu_diff
	do
		tmsu_diff=$(echo $tmsu_diff | tr -d '\n')
		# echo "<${lookup["$tmsu_diff"]}>"
		${lookup["$tmsu_diff"]}

	done < <(diff "${scim_tmsu_file}_original.sc" "${scim_tmsu_file}_new.sc" | rg "> let")

rm  "${scim_tmsu_file}_lookup" "${scim_tmsu_file}_original.sc" "${scim_tmsu_file}_new.sc"

# vim: set filetype=bash :

