#!/usr/bin/env bash
set -e

CLOUDCLI_DOCKER_IMAGE=devteds/cloudcli:1.0.3

DOT_AWS="${DOT_AWS:-$PWD/.cloudcli/aws}"
DOT_HELM="${DOT_HELM:-$PWD/.cloudcli/helm}"
DOT_KUBE="${DOT_KUBE:-$PWD/.cloudcli/kube}"
DOT_SSH="${DOT_SSH:-$PWD/.cloudcli/ssh}"
DOT_DOCTL="${DOT_DOCTL:-$PWD/.cloudcli/doctl}"
AWS_REGION="${AWS_REGION:-us-west-2}"
HOSTNAME_ALIAS="${HOSTNAME_ALIAS:-devteds-cloudcli}"
PORT_FORWARDS=""
REMOTE_USER="${REMOTE_USER:-$USER}"

show_help() {
  echo "
Usage: 
  cloudcli ssh|version|exec [OPTIONS] [COMMAND]

Examples:
  cloudcli ssh -h
  cloudcli ssh -p 8085:8000 -p 8086:8001
  cloudcli exec aws s3 ls
  cloudcli exec kubectl get po
  cloudcli version"
  exit 1
}

show_ssh_usage() {
  echo "
Usage: 
  cloudcli ssh [OPTIONS]

Options:
  -p <host-port:port>     Port forward from host-to-container
  -u <remote-user>        Remote/ssh user
  -h                      Help

Examples:
  cloudcli ssh
  cloudcli ssh -p 8085:8000 -p 8086:8001"  
}

[ ! -n "$1" ] && show_help

function docker_run {
  CMD=$1
   docker  run -it --rm \
    -v ${DOT_AWS}:/root/.aws:rw \
    -v ${DOT_HELM}:/root/.helm:rw \
    -v ${DOT_KUBE}:/root/.kube:rw \
    -v ${DOT_SSH}:/root/.ssh:rw \
    -v ${DOT_DOCTL}:/root/.config:rw \
    -v ${PWD}/:/cloudcli-home/workspace/:rw \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e HOSTNAME_ALIAS=${HOSTNAME_ALIAS} \
    -e AWS_REGION=${AWS_REGION} \
    -e REMOTE_USER=${REMOTE_USER} $PORT_FORWARDS $CLOUDCLI_DOCKER_IMAGE $CMD
}

function cli_exec {
  docker_run "$CLOUDCLI_CMD"
}

function parse_ssh_opts {
  while [ "$1" != "" ]; do
      case $1 in
          -p | --port-forward )
              shift
              PORT_FORWARDS="$PORT_FORWARDS -p $1 "
          ;;
          -u | --remote-user )
              shift
              REMOTE_USER=$1
          ;;          
        -h | --help )    show_ssh_usage
            exit
        ;;          
      esac
      shift
  done
}

CLOUDCLI_CMD_TYPE=$1
shift
CLOUDCLI_CMD="$@"

if [ "$CLOUDCLI_CMD_TYPE" = "exec" ]; then
  if [ -z "$CLOUDCLI_CMD" ]; then
    echo "Need a command to execute"
    show_help
  fi
  docker_run "$CLOUDCLI_CMD"
elif [ "$CLOUDCLI_CMD_TYPE" = "ssh" ]; then
  parse_ssh_opts $CLOUDCLI_CMD
  docker_run
elif [ "$CLOUDCLI_CMD_TYPE" = "version" ]; then
  docker_run "/cloudcli-home/bin/version.sh"
else show_help
fi