#!/usr/bin/env bash
#
# Usage:
#
#  $> zimagi <command> [args] [flags/options]
#
#=========================================================================================
# Environment
#
set -e

export ZIMAGI_CLIENT_PROFILE="${ZIMAGI_CLIENT_PROFILE:-default}"
export ZIMAGI_CLIENT_HOME="${ZIMAGI_CLIENT_HOME:-"${HOME}/.zimagi"}"
export ZIMAGI_CONFIG_FILE="${ZIMAGI_CLIENT_HOME}/client.${ZIMAGI_CLIENT_PROFILE}.sh"

if [ ! -f "$ZIMAGI_CONFIG_FILE" ]; then
  echo " Command API configuration"
  echo "--------------------------------------------------------"
  read -p "Host (required): " ZIMAGI_COMMAND_HOST
  if [ ! "$ZIMAGI_COMMAND_HOST" ]; then
    echo "Zimagi command API host is required"
    exit 1
  fi
  read -p "Port (443): " ZIMAGI_COMMAND_PORT
  if [ ! "$ZIMAGI_COMMAND_PORT" ]; then
    ZIMAGI_COMMAND_PORT=443
  fi

  read -p "User (admin): " ZIMAGI_API_USER
  if [ ! "$ZIMAGI_API_USER" ]; then
    ZIMAGI_API_USER=admin
  fi
  read -p "User token (required): " ZIMAGI_API_USER_TOKEN
  if [ ! "$ZIMAGI_API_USER_TOKEN" ]; then
    echo "Zimagi command API user token is required"
    exit 1
  fi
  read -p "User encryption key: " ZIMAGI_API_USER_KEY

  echo "Writing Zimagi ${ZIMAGI_CLIENT_PROFILE} profile configuration ..."
  echo """
export ZIMAGI_DOCKER_IMAGE="zimagi/cli"
export ZIMAGI_DOCKER_TAG="latest"

export ZIMAGI_COMMAND_HOST="${ZIMAGI_COMMAND_HOST}"
export ZIMAGI_COMMAND_PORT="${ZIMAGI_COMMAND_PORT}"
export ZIMAGI_DATA_HOST=""
export ZIMAGI_DATA_PORT="443"
export ZIMAGI_API_USER="${ZIMAGI_API_USER}"
export ZIMAGI_API_USER_TOKEN="${ZIMAGI_API_USER_TOKEN}"
export ZIMAGI_API_USER_KEY="${ZIMAGI_API_USER_KEY}"
""" >"$ZIMAGI_CONFIG_FILE"
fi

source "$ZIMAGI_CONFIG_FILE"
#
#=========================================================================================
# Execution
#
ZIMAGI_ARGS=(
  "--rm"
  "--interactive"
  "--tty"
  "--network" "host"
  "--volume" "${ZIMAGI_CLIENT_HOME}:/var/local/zimagi"
)
while IFS= read -r variable; do
  ZIMAGI_ARGS=("${ZIMAGI_ARGS[@]}" "--env" "$variable")
done <<< "$(env | grep -o "ZIMAGI_[_A-Z0-9]*")"

ZIMAGI_ARGS=("${ZIMAGI_ARGS[@]}" "${ZIMAGI_DOCKER_IMAGE}:${ZIMAGI_DOCKER_TAG}" "${@}")

docker run "${ZIMAGI_ARGS[@]}"
