#!/bin/bash

function implode() {
  local d=${1-} f=${2-}
  if shift 2; then
    printf %s "$f" "${@/#/$d}"
  fi
}

function in_array() {
    local needle=$1 el
    shift
    for el in "$@"; do
        [ "$el" = "$needle" ] && return 0
    done
    return 1
}

RESERVED_EEID=(
    ap bbb bkp cdn cr db fw git grf hyp lst met ml mon mstore mx osd osm pdu pkg psw pt sw swb vdb
    vpn wee wmail www  # codespell-ignore
)

function is_eeid() {
    grep -Eq "^[a-zA-Z0-9]{2,3}$" <<< "$1" && return 0
    return
}

function is_reserved_eeid () {
    # Check if given string is a reserved EeID
    local eeid
    for eeid in "${RESERVED_EEID[@]}"; do [[ "$1" == "$eeid" ]] && return 0; done
    return 1
}

function open_url() {
    # Open an URL
    $OPEN_URL_BIN "$1"
}

# shellcheck disable=SC2120
function default_usage() {
    # Print default usage
    EXTRA_SHORT_ARGS="$1"
    EXTRA_ARGS=( )
    ERROR_WORDS=()
    for arg in "${@:2}"; do
        if [[ -n "${ERROR_WORDS[*]}" ]] || [[ "$arg" == "--" ]]; then
            ERROR_WORDS+=( "$arg" )
        else
            EXTRA_ARGS+=( "$arg" )
        fi
    done
    [[ -n "${ERROR_WORDS[*]}" ]] && echo -e "${ERROR_WORDS[*]:1}\n"
    cat << EOF
Usage: $( basename "$0" ) [-h|x] $EXTRA_SHORT_ARGS"
  -h/--help		Print this message
  -x			Enable bash trace
EOF
    [[ "${#EXTRA_ARGS[@]}" -gt 0 ]] && echo -e "$( implode "\n" "${EXTRA_ARGS[@]}" )"
    [[ -n "${ERROR_WORDS[*]}" ]] && exit 1
    exit 0
}

function handle_args() {
    # Handle script arguments
    ARGS=()
    for arg in "$@"; do
        case $arg in
            -h|--help)
                [[ "$(type -t usage)" == "function" ]] && usage
                default_usage
            ;;
            -x|--trace)
                set -x
            ;;
            *)
                ARGS+=( "$arg" )
            esac
    done
}

# Load overwrite configuration files (if present)
OVERWRITE_CONF_PATHS=( /etc/eeadmtools ~/.config/eeadmtools )
for path in "${OVERWRITE_CONF_PATHS[@]}"; do
    # shellcheck source=/dev/null
    [[ -e "$path" ]] && source "$path"
done

# Set default configuration if undefined
[[ "${OPEN_URL_BIN:-null}" == "null" ]] && \
    OPEN_URL_BIN=xdg-open
[[ "${ICINGA_URL:-null}" == "null" ]] && \
    ICINGA_URL="https://supervision.easter-eggs.fr/icingaweb2"
[[ "${RT_URL:-null}" == "null" ]] && \
    RT_URL="https://rt.easter-eggs.fr"
[[ "${WIKI_URL:-null}" == "null" ]] && \
    WIKI_URL="https://www.easter-eggs.fr"
[[ "${MEET_URL:-null}" == "null" ]] && \
    MEET_URL="https://meet.easter-eggs.com"
[[ "${EEMYLE_URL:-null}" == "null" ]] && \
    EEMYLE_URL="https://eemyle.easter-eggs.fr"
[[ "${LDAPSAISIE_URL:-null}" == "null" ]] && \
    LDAPSAISIE_URL="https://ldapsaisie.easter-eggs.fr"
[[ "${CLICK2DIAL_URL:-null}" == "null" ]] && \
    CLICK2DIAL_URL="$LDAPSAISIE_URL/addon/ee/click2dial"
[[ "${EEADMIN_URL:-null}" == "null" ]] && \
    EEADMIN_URL="https://eeadmin.easter-eggs.fr"
[[ "${EEGO_URL:-null}" == "null" ]] && \
    EEGO_URL="https://eego.easter-eggs.fr"
[[ "${EXTRANET_URL:-null}" == "null" ]] && \
    EXTRANET_URL="https://extranet.easter-eggs.com"

# vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab
