#!/usr/bin/env bash

export PROJ128_DIR="$(dirname "$(dirname "$(readlink -f "$0")")")"
export PROJECT="$1"
export TASK="$2"
export ARGV=( "${@:3}" )
export PATH="$PROJ128_DIR/lib:$PATH"

if [ ! -f "$PROJECT/.proj128" ]
then
    echo "No .proj128 file found in: $PROJECT"
    exit 128
fi

if ! [[ "$PATH" =~ (^|:)"$PROJ128_DIR/bin"(:|$) ]]
then
    export PATH="$PROJ128_DIR/bin:$PATH"
fi

if [ -d "$PROJECT/node_modules" ] && [ -d "$PROJECT/node_modules/.bin" ] && ! [[ "$PATH" =~ (^|:)"$PROJECT/node_modules/.bin"(:|$) ]]
then
    export PATH="$PROJECT/node_modules/.bin:$PATH"
fi

source "$PROJECT/.proj128" || >(
    echo "Error in .proj128 in : $PROJECT"
    exit 129
)

IFS=$'\n' tasks=( $(bash -c "source \"$PROJECT/.proj128\"; declare -F") )

for ((i = 0; i <= ${#tasks[@]}; i++))
do
    if [[ "${tasks[$i]}" == *" $TASK" ]]
    then
        unset tasks
        echo "$(tput bold)+ $TASK ${ARGV[@]}$(tput sgr0)"
        eval "$TASK" "${ARGV[@]}"
        exit
    fi
done

echo "Task \"$TASK\" does not exists!"
exit 1
