#!/usr/bin/env bash
#
# This script opens a tunnel to Achievements RDS

LB_ENDPOINT=cb-achievements-staging-aurora.cluster-cqyyxr1hxrhn.us-west-2.rds.amazonaws.com
PORT=5432
PROFILE=twitch-cb-aws
STAGE=${1-dev}
if [ $STAGE == prod ]; then
    LB_ENDPOINT=cb-achievements-production-aurora.cluster-cqyyxr1hxrhn.us-west-2.rds.amazonaws.com
fi

# Make sure we can use the desired, local port.
if [ `lsof -i TCP:$PORT | grep LISTEN | wc -l` -gt "0" ]; then
    echo "Another program is using port $PORT"
    exit 1
fi

# Use relative files
cd "${BASH_SOURCE%/*}" || exit

# Get a temp path to use for an ssh control socket.
SOCKET=$(mktemp -t druid-tunnel-socket)
rm $SOCKET

cleanup () {
    # Close the SSH tunnel. Check if the socket exists since cleanup may
    # be called multiple times.
    if [ -S $SOCKET ]; then
        echo
        echo "Sending exit signal to SSH process"
        ssh -S $SOCKET -O exit $INSTANCE_ID
    fi
    exit 0
}

trap cleanup EXIT ERR INT TERM

function get_instance_id {
    aws ec2 describe-instances \
        --profile $PROFILE \
        --filter 'Name=tag:Name,Values=BastionHost' \
        --query "Reservations[].Instances[?State.Name == 'running'].InstanceId[]" \
        --output text
}

INSTANCE_ID=$(get_instance_id)

AWS_PROFILE=$PROFILE ssh -L $PORT:$LB_ENDPOINT:$PORT -o ProxyCommand='./ssh-proxy %h %r %p ~/.ssh/id_rsa.pub' ec2-user@$INSTANCE_ID -M -S $SOCKET -fNT
ssh -S $SOCKET -O check $INSTANCE_ID

# # Start up a bash session so that users can choose when to close the tunnel.
bash --rcfile <(echo 'PS1="\nUse ctrl-d to close the tunnel"')

ssh -S $SOCKET -O exit $INSTANCE_ID
