#!/usr/bin/env sh

# From Kehet
## https://gist.github.com/Kehet/5ba8a530e52ea3a0ae251d756faef680

# Vars {{{
## Current tasks temp file
readonly TASKW_CURRENT_LIST="/tmp/rofi-task.sh-current.tasks"

## Rofi colors
black="#000000"
blue="#0094cc"
# }}}

is_task_running() {                                             # {{{

	if task active >/dev/null 2>&1; then
		return_is_task_running="0"
	else
		return_is_task_running="1"
	fi

	return "${return_is_task_running:=/dev/null}"
}
# }}}
display_current_task() {                                        # {{{

	## List active task(s) in a temp file
	touch -- "${TASKW_CURRENT_LIST}"
	printf '%b\n\n' "			Choose a task to STOP" >> "${TASKW_CURRENT_LIST}"
	task +ACTIVE export | jq -r 'sort_by( -.urgency )[] | [ (.id|tostring), .description ] | join("	")' >> "${TASKW_CURRENT_LIST}"

	## Display active tasks list and get title from the choosen one
	TITLE=$(rofi -location 2 -lines 5 -no-auto-select -i -dmenu -p "RUNNING task(s)" -color-enabled -color-normal "${blue},${black},${blue},${black},${blue}" -color-window "${blue},${blue}" < "${TASKW_CURRENT_LIST}" |
		cut --delimiter="	" --field=2)
	ID=$(task "${TITLE}" simpleid | grep --after-context=2 -- ID | tail --lines=1 || return 0)

	## Remove temp file
	rm --force -- "${TASKW_CURRENT_LIST}"

	## If no task was selected (empty var) then exit
	[ -z "${TITLE}" ] && echo "Cancelled." && exit 0

	## If no ID was found (empty var) then exit
	[ -z "${ID}" ] && echo "Cancelled." && exit 0

	## Kill any pomodorrior process running for the current task
	pkill --full -- "${TITLE}"

	## Also kill any "sleep 60" remaining process
	pkill --full -- "sleep 60"

	## Stop the selected task and exit
	task "${ID}" stop >/dev/null && exit 0
}
# }}}
select_task() {                                                 # {{{
	## Display pending tasks list and get title from the choosen one
	TITLE=$(task status:pending export | jq -r 'sort_by( -.urgency )[] | [ (.id|tostring), .description ] | join("	")' | sort --numeric-sort --reverse |
		rofi -location 2 -no-auto-select -i -dmenu -p "Task" -color-enabled -color-normal "${black},${blue},${black},${blue},${black}" -color-window "${black},${black}" |
		cut --delimiter="	" --field=2)

	[ -z "${TITLE}" ] && echo "Cancelled." && exit 0

	## Start task with pomodorrior script (task end after 25 minutes)
	pomodorrior "${TITLE}" && exit 0
}
# }}}

main() {                                                        # {{{

	is_task_running \
		&& display_current_task \
		&& exit 0

	select_task \
		&& exit 0

}
# }}}

main

exit 255