#!/usr/bin/env bash
. _gotoutils # load common utility functions
load_gotopath
if detect_unmigrated_data; then
    echo "Ah hoy! Project data needs to be migrated."
    echo "for more info run:"
    echo "          goto --check-migration"
    exit 1
fi

_usage() {
    echo "Usage: project [add <projectname>] | [list]"
    echo "   other commands:"
    echo "     add <projectname> - adds a new project and makes it the active project."
    echo "     rm  <projectname> - removes the project"
    echo "     list              - lists all projects"
    echo "     deactivate        - deactivates goto project"
    echo "     help              - if you want to read this one more time."
}

_addproject() {
    local PROJECT_FOLDER="$GOTOPATH/projects/$1"
    if [[ ! -d $PROJECT_FOLDER ]]; then
        mkdir "$PROJECT_FOLDER"
    else
        echo "Project $1 already exists"
    fi
}

_rmproject() {
    if prompt "Are you sure you want to delete project $1? [y|n]: "; then
        if [ -z "$1" ]; then
            echo "Error - tried to remove empty project."
            exit 2
        fi
        rm -rf "$GOTOPATH/projects/$1"
        echo "Removed project $1"
    else
        echo 
        echo "Aborting delete of project $1"
    fi
}

_listprojects() {
    ls "$GOTOPATH/projects/"
}

_deactivate_project() {
    echo "" > "$GOTOPATH/active-project"
}

_changeproject() {
    if [ -d "$GOTOPATH/projects/$1" ]; then
        echo "$1" > "$GOTOPATH/active-project"
        echo "active project is now: $1"
    else
        echo "Warning - tried to change to a non existing project."
        echo "If you want to create it use the command:"
        echo
        echo "  project add $1"
        exit 1
    fi
}

_showactiveproject() {
    cat "$GOTOPATH/active-project" 
}

# ---------------------------
#  args parsing below
# ---------------------------
if [ $# -eq 0 ]
	then _showactiveproject && exit
fi


if [ "$1" = "list" ] 
    then _listprojects && exit 
fi


if [ "$1" = "help" ] 
    then _usage 
    exit 1
fi


if [ "$1" = "add" ] 
    then 
    if [ "$2" = "" ] ; then
        _usage
        exit 1
    else
	   _addproject "$2"
       _changeproject "$2"
        exit 0
    fi
fi

if [ "$1" = "rm" ] 
    then 
    if [ "$2" = "" ] ; then
        _usage
        exit 1
    else
       _rmproject "$2"
       _deactivate_project
        exit 0
    fi
fi

if [ "$1" = "deactivate" ]; then
    _deactivate_project
    exit 0
fi

# otherwise, activate project given
_changeproject "$1"
