#!/bin/bash
set -x

if [ $# != 1 ]
then
        echo "Usage: $0 <environment>"
        echo "Example: $0 dev"
        exit -1
fi

case $1 in
        prod)
            ## HOST
            DEPLOY_HOST=root@95.217.234.150

            ## PERMISSIONS
            DEPLOY_OWNER=blabs
            DEPLOY_GRPOWNER=psaserv

            ## PATHS
            DEPLOY_PATH=/var/www/vhosts/semprechiaro.com/partners.semprechiaro.com
            DB_FILE=$DEPLOY_PATH"/database/database.sqlite"
            DB_BACKUP_FILE=/tmp/deploy-database-backup.sqlite
            DEPLOY_PATH_TEMP=$DEPLOY_PATH"_temp"
            DEPLOY_PATH_OLD=$DEPLOY_PATH"_old"
            LARAVEL_ENV_PATH=/etc/blabs/env_files/semprechiaro_leadform.env
            #IMAGES_TMP_PATH=/www/vhosts/blabs.it/tmpdustysegnalazioni
            #OAUTH_KEYS_PATH=/etc/blabs/oauth_keys/attendance

            # LOCK FILES
            MIGRATIONS_LOCK_PATH=$DEPLOY_PATH"/locks/migrations"
            SEEDER_LOCK_PATH=$DEPLOY_PATH"/locks/seeder"
            #OAUTH_KEYS_LOCK_PATH=$DEPLOY_PATH"/locks/oauth_keys"
            #eOAUTH_CLIENT_LOCK_PATH=$DEPLOY_PATH"/locks/oauth_client"

            ## TOOLS BINARIES
            PHP_BIN=/opt/plesk/php/7.4/bin/php
            COMPOSER=/usr/lib/plesk-9.0/composer.phar
            ;;
        *)
            echo "Error: unknown environment $0"
            exit -1
            ;;
esac

## BACKUP OR CREATE DATABASE
ssh $DEPLOY_HOST "if [ -f $DB_FILE ]; then cp $DB_FILE $DB_BACKUP_FILE; fi"

## CREATES TEMP PATH
ssh $DEPLOY_HOST mkdir $DEPLOY_PATH_TEMP >/dev/null 2>&1|| true

## COPY FILES ON HOST
scp -r ./* $DEPLOY_HOST:$DEPLOY_PATH_TEMP

## INSTALL ENV FILE
ssh $DEPLOY_HOST cp $LARAVEL_ENV_PATH $DEPLOY_PATH_TEMP/.env

## CREATES USER CONTENT DIR
ssh $DEPLOY_HOST mkdir $DEPLOY_PATH_TEMP/public/user_content >/dev/null 2>&1|| true


## INSTALL VENDOR DEPENDENCIES AND BUILD APPLICATION ASSETS
ssh $DEPLOY_HOST "cd $DEPLOY_PATH_TEMP && $PHP_BIN $COMPOSER install"
ssh $DEPLOY_HOST "cd $DEPLOY_PATH_TEMP && npm install && npm run prod"

## CREATE LOG FILE
ssh $DEPLOY_HOST touch $DEPLOY_PATH_TEMP/storage/logs/laravel.log

## SET UP PERMISSIONS
ssh $DEPLOY_HOST "find $DEPLOY_PATH_TEMP -type f -exec chmod 664 {} \;"
ssh $DEPLOY_HOST "find $DEPLOY_PATH_TEMP -type d -exec chmod 775 {} \;"
ssh $DEPLOY_HOST chown -R $DEPLOY_OWNER:$DEPLOY_GRPOWNER $DEPLOY_PATH_TEMP
ssh $DEPLOY_HOST chmod -R ug+rwx $DEPLOY_PATH_TEMP/storage $DEPLOY_PATH_TEMP/bootstrap/cache $DEPLOY_PATH_TEMP/storage/app/public

## ACTIVATE MANTEINANCE MODE
ssh $DEPLOY_HOST "cd $DEPLOY_PATH; pwd; $PHP_BIN artisan down"

## MOVE FILES BETWEEN TEMP PATH AND PROPER PATH
ssh $DEPLOY_HOST mv $DEPLOY_PATH $DEPLOY_PATH_OLD
ssh $DEPLOY_HOST mv $DEPLOY_PATH_TEMP $DEPLOY_PATH

## RESTORE / CREATE DATABASE (AND RUN MIGRATIONS)
ssh $DEPLOY_HOST "if [ -f $DB_BACKUP_FILE ]; then cp $DB_BACKUP_FILE $DB_FILE; else touch $DB_FILE; $PHP_BIN artisan migrate; fi"

## RUN MIGRATIONS WITH SEEDING IF LOCK FILES ARE NOT PRESENT
ssh $DEPLOY_HOST "cd $DEPLOY_PATH; pwd; if [ ! -f $SEEDER_LOCK_PATH ]; then  $PHP_BIN artisan migrate:refresh --force --seed; else if [ ! -f $MIGRATIONS_LOCK_PATH ]; then $PHP_BIN artisan migrate; fi fi"

## CREATE PASSPORT OAUTH KEYS INSTALL IF LOCK FILE IS NOT PRESENT
#ssh $DEPLOY_HOST "cd $DEPLOY_PATH; pwd; if [ ! -f $OAUTH_KEYS_LOCK_PATH ]; then  $PHP_BIN artisan passport:keys --force -n; else cp $OAUTH_KEYS_PATH/* $DEPLOY_PATH/storage; fi"

## CREATE PASSPORT CLIENT IF LOCK FILE IS NOT PRESENT
#ssh $DEPLOY_HOST "cd $DEPLOY_PATH; pwd; if [ ! -f $OAUTH_CLIENT_LOCK_PATH ]; then  $PHP_BIN artisan passport:client --password -n --name='PWA' --provider='users'; fi"

## DEACTIVATE MANTEINANCE MODE
ssh $DEPLOY_HOST "cd $DEPLOY_PATH; pwd; $PHP_BIN artisan up"

## DELETE TEMP FILES
ssh $DEPLOY_HOST rm -rf $DEPLOY_PATH_OLD
ssh $DEPLOY_HOST rm -rf $DEPLOY_PATH_TEMP