#!/bin/bash

# Check usage
if [ $# -ne 2 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    echo "Usage: $1site PROJECT_BRANCH_PATH\n"
    echo -n "'$1site' part of makesite scripts. "
    case $1 in
        install )
            echo "Activate install hooks for target project. Run tests for master branch wich option --autotest." ;;
        remove )
            echo "Activate remove hooks for target project and remove project dir." ;;
        update )
            echo "Activate update hooks for target project. Run tests for master branch wich option --autotest." ;;
        test )
            echo "Activate test hooks for target project. Enable test only master branch wich option --auto." ;;
    esac
    makesite --version
    exit 0
fi

PROJECT_DIR=$1
ACTION=$2

TEMPLATE_FILE=$PROJECT_DIR/.makesite
SERVICE_DIR=$PROJECT_DIR/service
SOURCE_DIR=$PROJECT_DIR/source

if [ ! -z "$VIRTUAL_ENV" ]; then
    echo "Please deactivate VIRTUALENV '$VIRTUAL_ENV' first." && exit 1
fi

if [ ! -f $TEMPLATE_FILE ]; then
    echo "makesite not found templates in '$PROJECT_DIR'." && exit 1
fi

# BSFL
RED="tput -T ${TERM:="xterm"} setaf 1"
DEFAULT="tput -T ${TERM:="xterm"} sgr0"
LOG_FILE=${LOGFILE:="/tmp/log-$USER.log"}
sudo rm -rf $LOG_FILE

msg () {
    MESSAGE="$1"
    $RED 
    echo $MESSAGE 
    $DEFAULT
    echo >> "$LOG_FILE"
    echo $MESSAGE >> "$LOG_FILE"
}

run_action () {
    local ACTION=$1
    for t in `cat $TEMPLATE_FILE`; do
        for f in $SERVICE_DIR/${t}_*$ACTION*.sh; do
            if [ -f $f ]; then
                msg "Run $f"
                $f || {
                    msg "$ACTION crashed, see logfile: $LOG_FILE"
                    msg "For clean: removesite $PROJECT_DIR"
                    exit 0
                }
                echo
            fi
        done
    done
}

msg "Run $ACTION for $PROJECT_DIR"
msg "Logfile: $LOG_FILE"
sudo rm -f $LOG_FILE
echo

run_action check
run_action $ACTION

# Post install, update action
if [ -f $SOURCE_DIR/.makesite_*$ACTION* ]; then
    msg "Run $f" && $f && echo
fi
