#!/bin/bash

BUILD_PATH=`pwd`

ECHO_USER_NAME='ubuntu'
ECHO_SERVER_IP='ec2-54-244-70-196.us-west-2.compute.amazonaws.com'
ECHO_KEY_PATH="/home/ubuntu/.keys"
ECHO_DEST_PATH="/home/ubuntu/EchoAccounts$BUILD_NUMBER"
RSYNC_KEY_DEST=$ECHO_USER_NAME@$ECHO_SERVER_IP:$ECHO_KEY_PATH
RSYNC_DEST=$ECHO_USER_NAME@$ECHO_SERVER_IP:$ECHO_DEST_PATH
SSH_COMMAND="ssh -i $KEYS_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

# Local key files.
JENKINS_LOCAL_KEY_PATH='/home/ubuntu/.keys'
JENKINS_ECHO_ACCOUNTS_PEM="$JENKINS_LOCAL_KEY_PATH/Echo/Echo.pem"
SSH_COMMAND="ssh -i $JENKINS_ECHO_ACCOUNTS_PEM -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

# Make the new app destination
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "mkdir -p $ECHO_DEST_PATH"

# Make the key path
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "mkdir -p $ECHO_KEY_PATH"

# Copy config files from local jenkins to server
#
# Note - see Echo/upload_dev_keys_to_jenkins.sh to upload the dev keys to jenkins.
ENV_FILE="$JENKINS_LOCAL_KEY_PATH/Echo/EchoAccounts.env"
ALLOWED_APPS_DATA_FILE="/home/ubuntu/.keys/Echo/EchoAllowedApps.json"
FIREBASE_KEY_FILE="$JENKINS_LOCAL_KEY_PATH/Echo/FirebaseEcho.json"
ACCESS_TOKEN_PRIVATE_KEY="$JENKINS_LOCAL_KEY_PATH/Echo/EchoAccessToken.key"
ACCESS_TOKEN_PUBLIC_KEY="$JENKINS_LOCAL_KEY_PATH/Echo/EchoAccessToken.key.pub"
NGINX_CONFIG_FILE="$JENKINS_LOCAL_KEY_PATH/Echo/EchoAccounts.nginx.conf"

# .env file goes to the app path
rsync -avz -e "$SSH_COMMAND" --progress $ENV_FILE $RSYNC_DEST/.env

# Key files go into the home .keys folder.
rsync -avz -e "$SSH_COMMAND" --progress $ALLOWED_APPS_DATA_FILE $RSYNC_KEY_DEST/EchoAllowedApps.json
rsync -avz -e "$SSH_COMMAND" --progress $FIREBASE_KEY_FILE $RSYNC_KEY_DEST/FirebaseEcho.json
rsync -avz -e "$SSH_COMMAND" --progress $ACCESS_TOKEN_PRIVATE_KEY $RSYNC_KEY_DEST/EchoAccessToken.key
rsync -avz -e "$SSH_COMMAND" --progress $ACCESS_TOKEN_PUBLIC_KEY  $RSYNC_KEY_DEST/EchoAccessToken.key.pub

# Copy the git repo files.
cd $BUILD_PATH
rsync -avz -e "$SSH_COMMAND" --progress $BUILD_PATH/src $RSYNC_DEST/
rsync -avz -e "$SSH_COMMAND" --progress $BUILD_PATH/package.json $RSYNC_DEST/
rsync -avz -e "$SSH_COMMAND" --progress $BUILD_PATH/package-lock.json $RSYNC_DEST/
rsync -avz -e "$SSH_COMMAND" --progress $BUILD_PATH/api.js $RSYNC_DEST/
rsync -avz -e "$SSH_COMMAND" --progress $BUILD_PATH/ecosystem.config.js $RSYNC_DEST/

# Start the new process
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "cd $ECHO_DEST_PATH && npm install"
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "cd $ECHO_DEST_PATH && pm2 stop api && pm2 delete api"
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "cd $ECHO_DEST_PATH && pm2 link e5fvqnpr8zq7lpm 5suget3t92ds3do EchoAccounts"
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "cd $ECHO_DEST_PATH && pm2 start ecosystem.config.js --env production --update-env"
$SSH_COMMAND $ECHO_USER_NAME@$ECHO_SERVER_IP "cd $ECHO_DEST_PATH && pm2 cleardump && pm2 save"