#!/usr/bin/env bash
APP_NAME=$(cat .env | grep APP_NAME= | sed -e 's/APP_NAME=//g')
function CLEANING() {
    echo "[RUN] Cleaning environment"
    echo "[RUN] php artisan cache:clear"
    php artisan cache:clear

    echo "[RUN] php artisan view:clear"
    php artisan view:clear

    echo "[RUN] php artisan config:cache"
    php artisan config:cache

    echo "[RUN] php artisan route:clear"
    php artisan route:clear

    echo "[RUN] php artisan route:cache"
    php artisan route:cache
}

function INIT() {
    echo "[RUN] INIT"

    # init file dijalankan di production saat pertama kali install
    echo "[RUN] composer install"
    composer install

    echo "[RUN] artisan migrate:refresh --seed"
    php artisan migrate:refresh --seed

    echo "[RUN] php artisan cache:clear"
    php artisan cache:clear

    echo "[RUN] php artisan view:clear"
    php artisan view:clear

    echo "[RUN] php artisan config:cache"
    php artisan config:cache

    echo "[END] INIT"
}

function CHANGE_TO_DEV() {
    echo "[INFO] Change environment to DEVELOPMENT"
    echo "[RUN] sed -i 's/APP_ENV=production/APP_ENV=development/g' .env"
    sed -i 's/APP_ENV=production/APP_ENV=development/g' .env
    echo "--- $(cat .env | grep APP_ENV=)"
}

function CHANGE_TO_PROD() {
    echo "[INFO] Rollback environment to PRODUCTION"
    echo "[RUN] sed -i 's/APP_ENV=development/APP_ENV=production/g' .env"
    sed -i 's/APP_ENV=development/APP_ENV=production/g' .env
    echo "--- $(cat .env | grep APP_ENV=)"
}

function CHANGE_APP_VERSION() {
    PREV=$(cat .env | grep APP_VERSION)
    SHA=$(git log -1 | grep commit | awk -F ' ' '{print $2}' | head -c8)
    DATE=$(date +%F_%H-%M-%S_%Z)
    echo "[RUN] Change APP_VERSION [$SHA]"
    echo "[RUN] sed -i -e \"s/$PREV/APP_VERSION=$SHA\_$DATE/\" .env"

    sed -i -e "s/$PREV/APP_VERSION=$SHA\_$DATE/" .env
}

CLEANING
php artisan down --message="Perawatan Sistem" --retry=60
echo "================================================"
echo "[RUNNING] INSTALL/UPDATE $APP_NAME"
echo "================================================"

if [[ -f .env ]]; then
    ENV=$(cat .env | grep APP_ENV= | sed -e 's/APP_ENV=//g')
    DB_HOST=$(cat .env | grep DB_HOST= | sed -e 's/DB_HOST=//g')
    DB_DATABASE=$(cat .env | grep DB_DATABASE= | sed -e 's/DB_DATABASE=//g')
    DB_USERNAME=$(cat .env | grep DB_USERNAME= | sed -e 's/DB_USERNAME=//g')
    DB_PASSWORD=$(cat .env | grep DB_PASSWORD= | sed -e 's/DB_PASSWORD=//g' | sed -e "s/'//g")
    echo "[INFO] Current environment [${ENV}]"

    CHANGE_APP_VERSION

    # PRODUCTION
    if [[ "${ENV}" == "production" ]] || [[ "${ENV}" == "development" ]]; then

        if [[ "${ENV}" == "production" ]]; then
            CHANGE_TO_DEV
        fi

        COUNT_TABLE=$(mysql -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} ${DB_DATABASE} -sse "show tables;" | wc -l)
        echo "[INFO] found [$COUNT_TABLE] table on $DB_DATABASE"
        if [[  ${COUNT_TABLE} -lt 1 ]]; then
            CLEANING
            INIT
        else
            echo "[RUN] bash update.sh"
            CLEANING
            bash update.sh
        fi

        if [[ "${ENV}" == "production" ]]; then
            CHANGE_TO_PROD
        fi

    else # DEVELOPMENT / LOCAL
        INIT
    fi
else
    echo "[ERROR] .env not found."
fi

CLEANING
php artisan up
echo "================================================"
echo "[DONE] INSTALL/UPDATE $APP_NAME"
echo "================================================"
