#!/bin/bash -i

# The 'moniker' parameter is optional. If moniker is not specified,
# moniker will be set to the second argument (hostname | IP).

FORCE_REBUILD=false
while getopts "f:" OPTION
do
    case $OPTION in
        --help | -h)
            shift
            ;;
    esac
done

MONIKER=${1:-none}
PORT=2377

if [ ! -z "$_DOCK_MONIKER" ]; then
  echo "Remote docker is already configured for '$DOCK_MONIKER'. Try 'castoff' to disconnect."
  return 0
fi

if [ $MONIKER = "none" ]; then
  echo "This script is used in conjunction with 'register-dock'"
  echo
  echo "USAGE"
  echo "    $ source dock <ip or hostname configured in /etc/hosts>"
  echo "Examples:"
  echo "    $ dock my-centos1"
  echo "    $ dock 10.93.133.2"
  echo 
  echo "You can now run secure remote docker commands."
  echo "To undo this configuration:"
  echo "    $ castoff"
  kill -INT $$
fi

# Look up IP from moniker
FOUND_MONIKER=false
for f in $HOME/.docker/*; do
    if [ -d $f ] && [ -f $f/connection_config.txt ]; then
      while read -r line; do declare $line; done < "$f/connection_config.txt"
      if [ $DOCK_MONIKER = $MONIKER ]; then
        FOUND_MONIKER=true
        break
      fi
    fi
done

if [ $FOUND_MONIKER = false ]; then
  echo "Can't find dock configuration for $MONIKER"
  kill -INT $$  
fi

echo "Docking to $DOCK_USER@$DOCK_IP ($DOCK_MONIKER)"
# echo "MONIKER:$MONIKER"
# echo "IP:$DOCK_IP"
# echo "HOSTNAME:$DOCK_HOSTNAME"

if [ -z "$DOCK_IP" ]; then
  kill -INT $$
fi

# Remove docked condition including command line prompt.
# Python virtual environment prompt (or lack therof) should remain unchanged.
function castoff() {
  unset DOCKER_TLS_VERIFY
  unset DOCKER_CERT_PATH
  unset DOCKER_HOST
  unset DOCKER_IP
  if [ ! -z "$_OLD_VIRTUAL_PS1" ]; then
    _OLD_VIRTUAL_PS1=${_OLD_VIRTUAL_PS1%${_DOCK_MONIKER}}
    PS1=${PS1%${_DOCK_MONIKER}}
  else
    PS1=$_PS1_ORIGINAL
  fi
  unset _DOCK_MONIKER
  unset -f castoff
  unset _PS1_ORIGINAL
  unset -f sync-up
  unset -f sync-down
  unset -f do-sync-up
  unset -f do-sync-down
  echo "Castoff complete"
}

. dock-sync

export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=${HOME}/.docker/${DOCK_IP}
export DOCKER_HOST=tcp://${DOCK_IP}:2377
export DOCKER_IP=${DOCK_IP}

# Update command line prompt to reflect docked condition.
# Python virtual environment prompt (or lack therof) should remain unchanged.
if [ ! -z "$_OLD_VIRTUAL_PS1" ]; then
  _PS1_ORIGINAL=${_OLD_VIRTUAL_PS1}
  export _PS1_ORIGINAL
  _OLD_VIRTUAL_PS1="${_OLD_VIRTUAL_PS1}(${DOCK_MONIKER}) "
else
  _PS1_ORIGINAL=$PS1
fi
_DOCK_MONIKER="($DOCK_MONIKER) "
PS1="$PS1($DOCK_MONIKER) "
export PS1
export _DOCK_MONIKER
