#!/bin/bash

# locals
ENV="$(build/ec2/env-get)"
ENVFILE="deploy/env/$ENV"
NAME="ponyfoo-$ENV"
KEYFILE="deploy/keys/$ENV"

# instance-specific
INSTANCE_USER=$(cat $KEYFILE.user)
PUBLIC_DNS=$(cat $KEYFILE.dns)

# stack-specific
SERVER_NAME="ponyfoo.com"
NGINX_WORKERS="4"

APP="~/apps/$ENV"
APP_STATIC_ROOT="apps/.rsync/$ENV/app/.bin/public" # $HOME is appended in box
APP_CONFIG="$APP/config"
APP_NGINX="$APP/nginx"
RSYNC="~/apps/.rsync/$ENV"
RSYNC_REPO="$RSYNC/app"
RSYNC_MAILTUBE="$RSYNC/mailtube"
LOCAL_MAILTUBE="build/ec2/mailtube/"

# transfer nginx templates
rsync \
  -az \
  --stats \
  --delete \
  -e "ssh -ttti $KEYFILE -o StrictHostKeyChecking=no" \
  $LOCAL_MAILTUBE \
  $INSTANCE_USER@$PUBLIC_DNS:$RSYNC_MAILTUBE

# upload modifications
rsync \
  -az \
  --stats \
  --delete \
  -e "ssh -i $KEYFILE -o StrictHostKeyChecking=no" \
  $ENVFILE \
  $INSTANCE_USER@$PUBLIC_DNS:$APP_CONFIG

# jump into instance
ssh -Ti $KEYFILE -o StrictHostKeyChecking=no $INSTANCE_USER@$PUBLIC_DNS << EOF_RELOAD
  rm -rf $APP_NGINX
  cp -r $RSYNC_MAILTUBE/nginx $APP_NGINX

  sed -i "s#{NGINX_USER}#$INSTANCE_USER#g;s#{NGINX_WORKERS}#$NGINX_WORKERS#g" $APP_NGINX/nginx.conf
  sed -i "s#{SERVER_NAME}#$SERVER_NAME#g;s#{STATIC_ROOT}#\$HOME/$APP_STATIC_ROOT#g" $APP_NGINX/site.conf

  # configure and restart nginx
  sudo ln -sfn $APP_NGINX/nginx.conf /etc/nginx/nginx.conf
  sudo ln -sfn $APP_NGINX/site.conf /etc/nginx/sites-enabled/$NAME.conf
  sudo service nginx restart || sudo service nginx start || (sudo cat /var/log/nginx/error.log && exit 1)
  echo "nginx: pid is \$(cat /var/run/nginx.pid)"

  cluster_reload_if_needed () {
    cat $RSYNC_REPO/.pid
    if [ "\$?" == "0" ] ; then
      echo "Reloading cluster..."
      kill -s SIGUSR2 \$(cat $RSYNC_REPO/.pid)
    fi
  }

  cluster_reload_if_needed
EOF_RELOAD

echo "Deployed configuration to $ENV"
