#!/bin/bash

PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

export TF_VAR_FD_UPDATE_ALL=true
export TF_VAR_FD_UPDATE_INVENTORY=true
export TF_VAR_FD_UPDATE_MONITORING=true
export TF_VAR_FD_UPDATE_NSA=true

USAGE="
${0} <action>
action:
  - apply
  - destroy
  - graph
  - import
  - init
  - output
  - plan
  - refresh
  - show
  - state
  - taint
  - untaint
"

ARGS_LIST=(
  "no-update-all"
  "no-update-inventory"
  "no-update-monitoring"
  "no-update-nsa"
)

TF_OPTS=()
OPTS=()

for OPT in "${@}"
do
    shift
    if [[ "${OPT:0:2}" == "--" ]] || [[ "${OPT:0:1}" != "-" ]];
    then
         set -- "${@}" "${OPT}"
         continue
    fi

    TF_OPTS+=("${OPT}")
done

opts=$(getopt \
  --longoptions "$(printf "%s," "${ARGS_LIST[@]}")" \
  --name "$(basename "${0}")" \
  --options "" \
  -- "${@}"
)

if [ "${?}" -ne 0 ];
then
      echo "${USAGE}" >&2
      exit 1
fi

eval set --${opts}

while [[ $# -gt 0 ]]; do
  case "${1}" in
    --no-update-all)
      export TF_VAR_FD_UPDATE_INVENTORY=false
      export TF_VAR_FD_UPDATE_MONITORING=false
      export TF_VAR_FD_UPDATE_NSA=false
      shift 1
      ;;
    --no-update-inventory)
      export TF_VAR_FD_UPDATE_INVENTORY=false
      shift 1
      ;;
    --no-update-monitoring)
      export TF_VAR_FD_UPDATE_MONITORING=false
      shift 1
      ;;
    --no-update-nsa)
      export TF_VAR_FD_UPDATE_NSA=false
      shift 1
      ;;
    *)
      break
      ;;
  esac
done

if [[ "${@:${OPTIND}:1}" == "--" ]];
then
    shift 1
fi

case "${1}" in
    apply|destroy|graph|import|init|output|plan|refresh|show|state|taint|untaint)
        TF_COMMAND="${1}"
    ;;
    *)
        echo "${USAGE}" >&2
        exit 1
    ;;
esac

# Charge secrets 
fd-thallium -n "${FD_TERRA_THALLIUM_KEY_NAME:-${THALLIUM_KEY_NAME}}" -a thallium-configure -V -t

# Assume sts role
THALLIUM_KEY_NAME="tf.fjord" fd-thallium -n "tf.fjord" -a terragrunt -V -e -t -- ${TF_COMMAND} ${TF_OPTS[@]}

exit ${?}
