#!/bin/sh
# 2017, 2018 (c) Etersoft https://etersoft.ru
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
load_mod git

set_girar_host $1 && shift

if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
	echo "gitask ssh gear.alt task wrapper"
	echo "Use: gitask [GIRAR] [task|log|show|ls|quota]"
	echo "$HELP_GIRAR"
	echo "     --help - help"
	docmd ssh $GEARHOST task help | sed -e "s|abort|cancel|g"
	echo
	echo "Examples:"
	echo "     new    [p8]                 - create new task [on p8]"
	echo "     run    [NNNN] [--test-only] [--force] - run task NNNN (test only / force run)"
	echo "     add del package             - add package remove command"
	echo "     share  NNNN [enable]        - share task NNNN"
	echo "     find   PACKAGE              - do find-package of PACKAGE"
	echo "     log    NNNN                 - show build log for task NNNN"
	echo "     show   NNNN                 - show subtask list for task NNNN"
	echo "     cancel NNNN                 - cancel task NNNN"
	exit 0
fi

get_last()
{
	ssh $GEARHOST task ls | head -n1 | sed -e "s|^#\([0-9]*\) .*|\1|g"
}

get_test_status()
{
	ssh $GEARHOST task ls | grep "^#$1 " | grep "\[test-only\]"
}

# TODO: acl

epm assure girar-show girar-utils

if [ "$1" = "get" ] ; then
	if [ "$1 $2" = "get subtask" ] ; then
		[ -n "$3" ] || fatal "get subtask TASK PROJECTNMAE"
		# get subtask number from TASKNUMBER for PROJECTNAME
		SUBTASK="$(ssh $GEARHOST task show $3 | grep "/$4.git" | sed -e "s|^ \([0-9]*\):.*|\1|g")" || fatal
		#"
		echo "$SUBTASK"
		exit
	elif [ "$1 $2 $3" = "get last " ] || [ "$1 $2 $3" = "get last task" ] ; then
		TASK="$(get_last)" || fatal
		echo "$TASK"
		exit
	else
		fatal "Unknown command $1 $2"
	fi
fi

if [ "$1" = "find" ] ; then
	shift
	#showcmd "$GEARHOST>" find-packages "$@"
	docmd ssh $GITHOST find-package "$@"
	exit
fi

if [ "$1" = "log" ] ; then
	shift
	TASK="$1"
	[ -n "$TASK" ] || TASK="$(get_last)" || fatal
	showcmd "$GEARHOST>" girar-show "$TASK"
	GIT_ALT=$GEARHOST girar-show "$TASK"
	exit
fi

if [ "$1" = "ls" ] ; then
	shift
	if [ "$1" = "--all" ] ; then
		ssh $GEARHOST task ls "$@"
		exit
	fi
	# TODO: with arg(s) — subtask
	# TODO: add support ls -a (with subtasks)
	showcmd "$GEARHOST>" girar-show "$@"
	GIT_ALT=$GEARHOST girar-show "$@"
	exit
fi

if [ "$1" = "quota" ] ; then
	docmd ssh $GEARHOST quota
	exit
fi

if [ "$1" = "run" ] ; then
	shift

	FORCERUN=''
	PARAMTEST=''
	TASK=''

	while [ -n "$1" ] ; do
		if echo "$1" | grep -qv "^--" ; then
			TASK="$1"
		elif [ "$1" = "--force" ] ; then
			FORCERUN=1
		elif [ "$1" = "--test" ] || [ "$1" = "--test-only" ] ; then
			PARAMTEST='--test-only'
		else
			info "Unknown param $1"
		fi
		shift
	done

	[ -n "$TASK" ] || TASK="$(get_last)" || fatal "Can't get last task"

	# keep test status
	get_test_status "$TASK" && PARAMTEST='--test-only'
	# force reset test status
	[ -n "$FORCERUN" ] && PARAMTEST=''

	docmd ssh $GEARHOST task run $PARAMTEST "$TASK"
	exit
fi

if [ "$1" = "cancel" ] ; then
	shift
	#TASK="$(get_last)" || fatal
	docmd ssh $GEARHOST task abort "$@"
	exit
fi

if [ "$1" = "share" ] && [ -n "$2" ] ; then
	#shift
	docmd ssh $GEARHOST task share "$2" enable
	exit
fi


if [ "$1" = "task" ] ; then
	# by default
	shift
fi

docmd ssh $GEARHOST task "$@"

