#!/usr/bin/env bash

function gitops_deprovision_mongo_help() {
  [[ -n "$1" ]] && echo_warning "$1"

  reset_colors
  cat << EOM
Usage:
  mas gitops-deprovision-mongo [options]
Where ${COLOR_YELLOW}specified${TEXT_RESET} each option may also be defined by setting the appropriate environment variable.
When no options are specified on the command line, interactive-mode will be enabled by default.

GitOps Configuration:
  -a, --account-id ${COLOR_YELLOW}ACCOUNT_ID${TEXT_RESET}   Account name that the cluster belongs to
  -c, --cluster-id ${COLOR_YELLOW}CLUSTER_ID${TEXT_RESET}   Cluster ID

Secrets Manager:
      --secrets-path ${COLOR_YELLOW}SECRETS_PATH${TEXT_RESET}                    Secrets Manager path
      --secrets-key-seperator ${COLOR_YELLOW}SECRETS_KEY_SEPERATOR${TEXT_RESET}  Secrets Manager key seperator string

MongoDb Provider Selection:
      --mongo-provider ${COLOR_YELLOW}MONGODB_PROVIDER${TEXT_RESET}  The mongodb provider to install. Only "aws" is supported

AWS MongoDb Provider:
      --aws-access-key ${COLOR_YELLOW}AWS_ACCESS_KEY_ID${TEXT_RESET}                                       Access Key
      --aws-secret-key ${COLOR_YELLOW}AWS_SECRET_ACCESS_KEY_ID${TEXT_RESET}                                Secret Key
      --aws-region ${COLOR_YELLOW}AWS_REGION${TEXT_RESET}                                                  Region
      --aws-vpc-id ${COLOR_YELLOW}VPC_ID${TEXT_RESET}                                                      VPC ID
      --aws-docdb-cluster-name ${COLOR_YELLOW}DOCDB_CLUSTER_NAME${TEXT_RESET}                              Cluster Name
      --aws-docdb-ingress-cidr ${COLOR_YELLOW}DOCDB_INGRESS_CIDR${TEXT_RESET}                              Ingress CIDR
      --aws-docdb-egress-cidr ${COLOR_YELLOW}DOCDB_EGRESS_CIDR${TEXT_RESET}                                Egress CIDR
      --aws-docdb-cidr-az1 ${COLOR_YELLOW}DOCDB_CIDR_AZ1${TEXT_RESET}                                      Availability Zone 1 CIDR
      --aws-docdb-cidr-az2 ${COLOR_YELLOW}DOCDB_CIDR_AZ2${TEXT_RESET}                                      Availability Zone 2 CIDR
      --aws-docdb-cidr-az3 ${COLOR_YELLOW}DOCDB_CIDR_AZ3${TEXT_RESET}                                      Availability Zone 3 CIDR
      --aws-docdb-instance-identifier-prefix ${COLOR_YELLOW}DOCDB_INSTANCE_IDENTIFIER_PREFIX${TEXT_RESET}  Prefix
      --aws-docdb-instance-number ${COLOR_YELLOW}DOCDB_INSTANCE_NUMBER${TEXT_RESET}                        DocDB Instance Count

Other Commands:
  -h, --help                                      Show this help message
EOM
  [[ -n "$1" ]] && exit 1 || exit 0
}


function gitops_deprovision_mongo_noninteractive() {
  SECRETS_KEY_SEPERATOR="/"

  while [[ $# -gt 0 ]]
  do
    key="$1"
    shift
    case $key in
      # GitOps Configuration
      -a|--account-id)
        export ACCOUNT_ID=$1 && shift
        ;;
      -c|--cluster-id)
        export CLUSTER_ID=$1 && shift
        ;;

      # Secrets Manager
      --secrets-path)
        export SECRETS_PATH=$1 && shift
        ;;
      --secrets-key-seperator)
        export SECRETS_KEY_SEPERATOR=$1 && shift
        ;;

      # MongoDb Provider Selection
      --mongo-provider)
        export MONGODB_PROVIDER=$1 && shift
        ;;

      # AWS MongoDb provider
      --aws-access-key)
        export AWS_ACCESS_KEY_ID=$1 && shift
        ;;
      --aws-secret-key)
        export AWS_SECRET_ACCESS_KEY=$1 && shift
        ;;
      --aws-region)
        export AWS_REGION=$1 && shift
        ;;
      --aws-vpc-id)
        export VPC_ID=$1 && shift
        ;;
      --aws-docdb-cluster-name)
        export DOCDB_CLUSTER_NAME=$1 && shift
        ;;
      --aws-docdb-ingress-cidr)
        export DOCDB_INGRESS_CIDR=$1 && shift
        ;;
      --aws-docdb-egress-cidr)
        export DOCDB_EGRESS_CIDR=$1 && shift
        ;;
      --aws-docdb-cidr-az1)
        export DOCDB_CIDR_AZ1=$1 && shift
        ;;
      --aws-docdb-cidr-az2)
        export DOCDB_CIDR_AZ2=$1 && shift
        ;;
      --aws-docdb-cidr-az3)
        export DOCDB_CIDR_AZ3=$1 && shift
        ;;
      --aws-docdb-instance-identifier-prefix)
        export DOCDB_INSTANCE_IDENTIFIER_PREFIX=$1 && shift
        ;;
      --aws-docdb-instance-number)
        export DOCDB_INSTANCE_NUMBER=$1 && shift
        ;;


      # Other Commands
      -h|--help)
        gitops_deprovision_mongo_help
        ;;
      *)
        # unknown option
        echo -e "${COLOR_RED}Usage Error: Unsupported option \"${key}\"${COLOR_RESET}\n"
        gitops_deprovision_mongo_help "Usage Error: Unsupported option \"${key}\" "
        exit 1
        ;;
      esac
  done

  [[ -z "$CLUSTER_ID" ]] && gitops_deprovision_mongo_help "CLUSTER_ID is not set"
  [[ -z "$MONGODB_PROVIDER" ]] && gitops_deprovision_mongo_help "MONGODB_PROVIDER is not set"
  [[ -z "$ACCOUNT_ID" ]] && gitops_deprovision_mongo_help "ACCOUNT_ID is not set"

  if [ $MONGODB_PROVIDER == 'aws' ]; then
    if [ -z $AWS_ACCESS_KEY_ID ] || [ -z $AWS_SECRET_ACCESS_KEY ] || [ -z $VPC_ID ] || [ -z $AWS_REGION ]; then
      echo 'Missing required params for AWS mongo provider, make sure to provide --aws-access-key, --aws-secret-key, --aws-region and --aws-vpc-id'
      exit 1
    fi
    if [ -z $DOCDB_INGRESS_CIDR ] || [ -z $DOCDB_EGRESS_CIDR ] || [ -z $DOCDB_CIDR_AZ1 ] || [ -z $DOCDB_CIDR_AZ2 ] || [ -z $DOCDB_CIDR_AZ3 ]; then
      echo 'Missing required params for AWS mongo provider, make sure to provide --aws-docdb-ingress-cidr, --aws-docdb-egress-cidr, --aws-docdb-cidr-az1, --aws-docdb-cidr-az2 and --aws-docdb-cidr-az3'
      exit 1
    fi
    if [ -z $DOCDB_CLUSTER_NAME ] || [ -z $DOCDB_INSTANCE_IDENTIFIER_PREFIX ]; then
      echo 'Missing required params for AWS mongo provider, make sure to provide --aws-docdb-instance-identifier-prefix, --aws-docdb-cluster-name'
      exit 1
    fi
  fi

}

function gitops_deprovision_mongo() {
  # Take the first parameter off (it will be create-gitops)
  shift
  if [[ $# -gt 0 ]]; then
    gitops_deprovision_mongo_noninteractive "$@"
  else
    echo "Not supported yet"
    exit 1
    gitops_deprovision_mongo_interactive
  fi

  # catch errors
  set -o pipefail
  trap 'echo "[ERROR] Error occurred at $BASH_SOURCE, line $LINENO, exited with $?"; exit 1' ERR

  echo
  reset_colors
  echo_h2 "Review Settings"

  echo "${TEXT_DIM}"
  echo_h2 "Target" "    "
  echo_reset_dim "Account ID ............................ ${COLOR_MAGENTA}${ACCOUNT_ID}"
  echo_reset_dim "Cluster ID ............................ ${COLOR_MAGENTA}${CLUSTER_ID}"
  reset_colors

  echo "${TEXT_DIM}"
  echo_h2 "Secrets Manager" "    "
  echo_reset_dim "Secrets Path .......................... ${COLOR_MAGENTA}${SECRETS_PATH}"
  reset_colors

  echo "${TEXT_DIM}"
  echo_h2 "Mongo" "    "
  echo_reset_dim "Mongo Provider  ....................... ${COLOR_MAGENTA}${MONGODB_PROVIDER}"
  if [ $MONGODB_PROVIDER == 'aws' ]; then
    echo_reset_dim "AWS Access Key ID  .................... ${COLOR_MAGENTA}${AWS_ACCESS_KEY_ID}"
    echo_reset_dim "AWS Secret Access Key  ................ ${COLOR_MAGENTA}${AWS_SECRET_ACCESS_KEY:0:8}<snip>"
    echo_reset_dim "AWS Region  ........................... ${COLOR_MAGENTA}${AWS_REGION}"
    echo_reset_dim "AWS VPC ID  ........................... ${COLOR_MAGENTA}${VPC_ID}"
    echo_reset_dim "AWS DOCDB CLUSTER NAME  ............... ${COLOR_MAGENTA}${DOCDB_CLUSTER_NAME}"
    echo_reset_dim "AWS DOCDB Instance count .............. ${COLOR_MAGENTA}${DOCDB_INSTANCE_NUMBER}"

  fi
  if [ $MONGODB_PROVIDER == 'yaml' ]; then
    echo_reset_dim "YAML Configuration File ............... ${COLOR_MAGENTA}${MONGO_YAML_FILE}"
  fi

  export SECRET_NAME_MONGO=${ACCOUNT_ID}${SECRETS_KEY_SEPERATOR}${CLUSTER_ID}${SECRETS_KEY_SEPERATOR}mongo

  AVP_TYPE=aws  # Support for IBM will be added later
  sm_login

  if [ $MONGODB_PROVIDER == 'aws' ]; then
    # Set the MAS_CONFIG_DIR and MAS_INSTANCE_ID to generate the config details.
    # The MAS_INSTANCE_ID doesn't have to be the correct instance id
    # The MONGODB_NAMESPACE defines the name of the config file created
    CURRENT_DIR=$PWD
    TEMP_DIR=$CURRENT_DIR/tmp-mongo-deprovision
    rm -rf $TEMP_DIR
    mkdir -p $TEMP_DIR
    export MAS_CONFIG_DIR=$TEMP_DIR
    export MONGODB_NAMESPACE=docdb
    export ROLE_NAME=mongodb
    export DOCDB_INSTANCE_NUMBER=${DOCDB_INSTANCE_NUMBER:-"3"}
    export MONGODB_ACTION=uninstall

    ansible-playbook ibm.mas_devops.run_role
    rc=$?
    [ $rc -ne 0 ] && exit $rc

    echo -e "Deleting secret  $SECRET_NAME_MONGO"
    sm_delete_secret $SECRET_NAME_MONGO
    rm -rf $TEMP_DIR

  elif [ $MONGODB_PROVIDER == 'yaml' ]; then
    echo -e "Deleting secret  $SECRET_NAME_MONGO"
    sm_delete_secret $SECRET_NAME_MONGO 
  fi

  exit 0
}
