#!/usr/bin/env bash

set -eo pipefail
shopt -s nullglob

WHEREAMI="$(cd "$(dirname "$0")" && pwd)"

# ----------------- Check if User Provided Parameters are Set ------------------

. "${WHEREAMI}"/chk-usr-env

# ----------------------- Set Common Default Parameters ------------------------

. "${WHEREAMI}"/set-default-env

# --------------------- Maybe Generate Manager TLS Assets ----------------------

. "${WHEREAMI}"/gen-mgr-tls-assets

# --------------------------- Set Default Parameters ---------------------------

GROVE_CONFIG=${GROVE_CONFIG:-"${MANAGER_CONFIG_DIR}/grove.yaml"}

IMPLY_MANAGER_SERVER_DIR=${IMPLY_MANAGER_SERVER_DIR:-"/var/opt/imply/grove"}
IMPLY_MANAGER_USER_RESOURCE_DIR=${IMPLY_MANAGER_USER_RESOURCE_DIR:-"${IMPLY_MANAGER_SERVER_DIR}/user"}
IMPLY_MANAGER_RESOURCE_DIR=${IMPLY_MANAGER_RESOURCE_DIR:-"${IMPLY_MANAGER_SERVER_DIR}/resource"}
IMPLY_MANAGER_AGENT_TIMEOUT=${IMPLY_MANAGER_AGENT_TIMEOUT:-180}
IMPLY_MANAGER_CACHE_DIR=${IMPLY_MANAGER_CACHE_DIR:-"${IMPLY_MANAGER_SERVER_DIR}/cache"}
IMPLY_MANAGER_CACHE_SIZE=${IMPLY_MANAGER_CACHE_SIZE:-3000000000}
IMPLY_MANAGER_CACHE_EXPIRY=${IMPLY_MANAGER_CACHE_EXPIRY:--1}
IMPLY_MANAGER_GROVE_DEBUG=${IMPLY_MANAGER_GROVE_DEBUG:-false}

DEFAULT_REPO_URLS=(
  "{\"url\":\"https://static.imply.io/onprem\"}"
  "{\"url\":\"https://static.imply.io/release\"}"
)
DEFAULT_SERVER_REPOS="[$(IFS=','; echo "${DEFAULT_REPO_URLS[*]}")]"

IMPLY_MANAGER_SERVER_REPOS=${IMPLY_MANAGER_SERVER_REPOS:-"${DEFAULT_SERVER_REPOS}"}

unset DEFAULT_REPO_URLS DEFAULT_SERVER_REPOS

# ---------------------------- Generate Grove Config ---------------------------

cat <<EOT > "${GROVE_CONFIG}"
#
# This file was automatically generated and should not be edited. 
#

debug: ${IMPLY_MANAGER_GROVE_DEBUG}
server_port: ${IMPLY_MANAGER_AGENT_PORT}
server_http_port: ${IMPLY_MANAGER_REPO_PORT}
agent_timeout: ${IMPLY_MANAGER_AGENT_TIMEOUT}
server_repositories: ${IMPLY_MANAGER_SERVER_REPOS}
server_resource_dir: '${IMPLY_MANAGER_RESOURCE_DIR}'
server_user_resource_dir: '${IMPLY_MANAGER_USER_RESOURCE_DIR}'
server_home_dir: '${IMPLY_MANAGER_SERVER_DIR}'
server_cache_dir: '${IMPLY_MANAGER_CACHE_DIR}'
cache_size: ${IMPLY_MANAGER_CACHE_SIZE}
cache_expiry: ${IMPLY_MANAGER_CACHE_EXPIRY}
EOT

if [[ "${IMPLY_MANAGER_LEGACY_CONNECT}" == "true" ]]; then
  cat <<EOT >> "${GROVE_CONFIG}"
skip_connect: True
EOT
fi

# ------------------------ Configure Authentication Token ----------------------

if [ -n "${IMPLY_MANAGER_AUTH_TOKEN}" ]; then
  cat <<EOT >> "${GROVE_CONFIG}"
server_username: 'imply'
server_password: '${IMPLY_MANAGER_AUTH_TOKEN}'
EOT
fi

# -------------------------------- Configure TLS -------------------------------

if [ -f "${IMPLY_MANAGER_CA_CERT_PATH}" ]; then
  cat <<EOT >> "${GROVE_CONFIG}"
server_ca_cert: '${IMPLY_MANAGER_CA_CERT_PATH}'
EOT
fi

if [[ -f "${IMPLY_MANAGER_SSL_KEY_PATH}" && -f "${IMPLY_MANAGER_SSL_CERT_PATH}" ]]; then
  cat <<EOT >> "${GROVE_CONFIG}"
server_ssl_key: '${IMPLY_MANAGER_SSL_KEY_PATH}'
server_ssl_cert: '${IMPLY_MANAGER_SSL_CERT_PATH}'
EOT
fi

# ------------------------------ Log Configuration -----------------------------

if "${VERBOSE_CONFIG_GEN}"; then
  echo -e "\n[${GROVE_CONFIG}]"

  sed 's/^\(.*password[^:]*:\).*$/\1 **********/gI' "${GROVE_CONFIG}"
fi
