#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_PATH/common/functions"
source "$PLUGIN_PATH/config/functions"

case "$1" in
  config)
    config_parse_args "$@"
    config_create "$ENV_FILE"
    is_config_export "$@" && config_export "$DOKKU_CONFIG_TYPE" "$APP" && exit 0

    [[ "$APP" ]] && DOKKU_CONFIG_TYPE=$APP
    [[ ! -s $ENV_FILE ]] && echo "no config vars for $DOKKU_CONFIG_TYPE" && exit 1

    VARS=$(grep -Eo "export ([a-zA-Z_][a-zA-Z0-9_]*=.*)" $ENV_FILE | cut -d" " -f2-)

    for var in "$@"; do
      if [[ "$var" == "--shell" ]]; then
        echo $VARS
        exit 0
      fi
    done


    dokku_log_info2_quiet "$DOKKU_CONFIG_TYPE config vars"
    config_styled_hash "$VARS"
    ;;

  config:get)
    config_get "$@"
    ;;

  config:set)
    config_set "$@"
    ;;

  config:unset)
    config_parse_args "$@"
    [[ "$2" = "--no-restart" ]] && set -- "${@:1:1}" "${@:3}"

    if [[ -z $3 ]]; then
      echo "Usage: dokku config:unset APP KEY1 [KEY2 ...]"
      echo "Must specify KEY to unset."
      exit 1
    fi

    config_create "$ENV_FILE"
    ENV_TEMP=$(cat "${ENV_FILE}")
    VARS="${*:3}"

    for var in $VARS; do
      dokku_log_info1 "Unsetting $var"
      ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $var=/ d")

      config_write "$ENV_TEMP"
    done

    if [[ "$DOKKU_CONFIG_RESTART" == "true" ]]; then
      dokku_log_info1 "Restarting app $APP"
      dokku ps:restart $APP
    fi
    ;;

  config:set-norestart)
    dokku_log_info2 "$1 is deprecated as of v0.3.22"
    shift 1
    dokku config:set --no-restart "$@"
    ;;

  config:unset-norestart)
    dokku_log_info2 "$1 is deprecated as of v0.3.22"
    shift 1
    dokku config:unset --no-restart "$@"
    ;;

  help | config:help)
    cat && cat<<EOF
    config (<app>|--global), Display all global or app-specific config vars
    config:get (<app>|--global) KEY, Display a global or app-specific config value
    config:set (<app>|--global) KEY1=VALUE1 [KEY2=VALUE2 ...], Set one or more config vars
    config:unset (<app>|--global) KEY1 [KEY2 ...], Unset one or more config vars
EOF
    ;;

  *)
    exit $DOKKU_NOT_IMPLEMENTED_EXIT
    ;;

esac
