#!/bin/bash

function setAcl() {
    sudo setfacl -Rn -m u:www-data:rwX -m u:`whoami`:rwX $1
    sudo setfacl -dRn -m u:www-data:rwX -m u:`whoami`:rwX $1
    sudo chown -R :www-data $1
    sudo chmod -R g+w $1
    sudo chmod g+ws $1
    sudo setfacl -dR -m g::rwX $1
}

function maintenanceOn() {
    echo "Maintenance ON"
    touch web/IN_MAINTENANCE_MODE
}

function maintenanceOff() {
    echo "Maintenance OFF"
    rm web/IN_MAINTENANCE_MODE
}

function maintenance() {
    case $1 in
        "on")
            maintenanceOn
            ;;
        "off")
            maintenanceOff
            ;;
         *)
            echo "Valid parameters are 'on' or 'off'"
            ;;
    esac
}

function setPermissions() {
    echo "Setting Permissions"
    sudo chown :www-data var/
    echo "  var/logs/"
    setAcl var/logs/
    echo "  var/cache"
    setAcl var/cache/

    if [ -n "$1" ]
      then
        echo "  $1"
        sudo chown :www-data $1
        setAcl $1
    fi
}

function printUsage() {
    echo "Valid Options:"
    echo "update:          Update application from git"
    echo "install:         Install productive"
    echo "run-tests:       Run tests"
    echo "set-permissions: Set permissions for Apache."
    echo "maintenance:     Turn maintenance on or off. Parameters: 'on'|'off'"
    echo "help:            Print this help text"
}

function update() {
    echo "Updating"
    maintenanceOn && \
    git pull && \
    composer install && \
    bin/console assetic:dump && \
    bin/console doctrine:cache:clear-metadata && \
    bin/console doctrine:schema:update --dump-sql
}

function install() {
    echo "Installing"
    (SYMFONY_ENV="prod" composer install --optimize-autoloader) && \
    bin/console --env=prod assetic:dump && \
    maintenanceOff
}

function runTests() {
    bin/console --env="test" doctrine:schema:update --force
    bin/phpcs --standard=psr2 --ignore=*.js,*.css ./src

    echo ""
    echo "=================="
    echo "Running UNIT Tests"
    echo "=================="
    echo ""
    bin/phpunit -c app/ --testsuite "Unit Tests"

    echo ""
    echo "========================="
    echo "Running INTEGRATION Tests"
    echo "========================="
    echo ""
    bin/phpunit -c app/ --testsuite "Integration Tests"

    echo ""
    echo "========================"
    echo "Running ACCEPTANCE Tests"
    echo "========================"
    echo ""
    bin/phpunit -c app/ --testsuite "Acceptance Tests"

    echo ""
    echo "========================"
    echo "Running SMOKE Tests"
    echo "========================"
    echo ""
    bin/phpunit -c app/ --testsuite "Smoke Tests"
}

case $1 in
    "update")
        update
        ;;
    "install")
        install
        ;;
    "maintenance")
        maintenance $2
        ;;
    "help")
        printUsage
        ;;
    "set-permissions")
        setPermissions $2
        ;;
    "run-tests")
        runTests
        ;;
    *)
        printUsage
        exit 1
        ;;
esac
