#!/usr/bin/env bash

_bash-it-comp-enable-disable()
{
	local enable_disable_args="alias plugin completion"
	COMPREPLY=( $(compgen -W "${enable_disable_args}" -- ${cur}) )
}

_bash-it-comp-list-available-not-enabled()
{
	subdirectory="$1"
	
	local available_things=$(for f in `ls -1 $BASH_IT/$subdirectory/available/*.bash`; 
		do 
			if [ ! -e $BASH_IT/$subdirectory/enabled/$(basename $f) ]
			then
				basename $f | cut -d'.' -f1
			fi
		done)

	COMPREPLY=( $(compgen -W "all ${available_things}" -- ${cur}) )	
}

_bash-it-comp-list-enabled()
{
	subdirectory="$1"
	
	local enabled_things=$(for f in `ls -1 $BASH_IT/$subdirectory/enabled/*.bash`; 
		do 
			basename $f | cut -d'.' -f1
		done)

	COMPREPLY=( $(compgen -W "all ${enabled_things}" -- ${cur}) )	
}

_bash-it-comp-list-available()
{
	subdirectory="$1"
	
	local enabled_things=$(for f in `ls -1 $BASH_IT/$subdirectory/available/*.bash`; 
		do 
			basename $f | cut -d'.' -f1
		done)

	COMPREPLY=( $(compgen -W "${enabled_things}" -- ${cur}) )	
}

_bash-it-comp()
{
	local cur prev opts prevprev
	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"
	
	opts="help show enable disable"
		
	case "${prev}" in
		show)
			local show_args="plugins aliases completions"
			COMPREPLY=( $(compgen -W "${show_args}" -- ${cur}) )
			return 0
			;;
		help)
			local help_args="plugins aliases"
			COMPREPLY=( $(compgen -W "${help_args}" -- ${cur}) )
			return 0
			;;
		enable)
			_bash-it-comp-enable-disable
			return 0
			;;
		disable)
			_bash-it-comp-enable-disable
			return 0
			;;
		aliases)
			prevprev="${COMP_WORDS[COMP_CWORD-2]}"
			
			case "${prevprev}" in
				help)
					_bash-it-comp-list-available aliases
					return 0
					;;
			esac
			;;			
		alias)
			prevprev="${COMP_WORDS[COMP_CWORD-2]}"
			
			case "${prevprev}" in
				enable)
					_bash-it-comp-list-available-not-enabled aliases
					return 0
					;;
				disable)
					_bash-it-comp-list-enabled aliases
					return 0
					;;
			esac
			;;			
		plugin)
			prevprev="${COMP_WORDS[COMP_CWORD-2]}"
			
			case "${prevprev}" in
				enable)
					_bash-it-comp-list-available-not-enabled plugins
					return 0
					;;
				disable)
					_bash-it-comp-list-enabled plugins
					return 0
					;;
			esac
			;;			
		completion)
			prevprev="${COMP_WORDS[COMP_CWORD-2]}"
			
			case "${prevprev}" in
				enable)
					_bash-it-comp-list-available-not-enabled completion
					return 0
					;;
				disable)
					_bash-it-comp-list-enabled completion
					return 0
					;;
			esac
			;;			
	esac
	
	COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
	
	return 0
}

complete -F _bash-it-comp bash-it
