#!/bin/bash

LIB_DIR="$( dirname "$( realpath "$0" )" )/../lib"
if [[ -f "$LIB_DIR/eeadmtools/helpers" ]]; then
    # shellcheck source=/dev/null
    source "$LIB_DIR/eeadmtools/helpers"
else
    # shellcheck source=/dev/null
    source "$LIB_DIR/helpers"
fi

function usage() {
    default_usage \
      "[action] [VM] [HYP]" \
      "" \
      "  view VM\t\tView VM in extranet (default action)" \
      "  VM" \
      ""\
      "  console [VM] [HYP]\tView VM console (using virt-viewer)" \
      "  console [VM]@[HYP]" \
      "" \
      "  edit [VM] [HYP]\tEdit VM configuration (using virt-manager)" \
      "  edit [VM]@[HYP]" \
      -- "$@"
}
handle_args "$@"

ACTION=
VM=
HYP=

# Handle eevm:// URL scheme
# shellcheck disable=SC2001
if [[ "${#ARGS[@]}" -eq 1 ]] && grep -Eq '^vm:(//)?' <<< "${ARGS[0]}"; then
    PARSED_URI=$( sed -E 's#vm:(//)?(([^@/]+)(@([^/]+))?)?(/(view|console|edit))?/?$#\3|\5|\7#' <<< "${ARGS[0]}" )
    VM=$( cut -d '|' -f1 <<< "$PARSED_URI" )
    HYP=$( cut -d '|' -f2 <<< "$PARSED_URI" )
    ACTION=$( cut -d '|' -f3 <<< "$PARSED_URI" )
else
    idx=0
    while [[ $idx -lt ${#ARGS[@]} ]]; do
        opt=${ARGS[$idx]}
        if [[ -z "${VM:-}" ]] && [[ -z "${ACTION:-}" ]] && in_array "$opt" view console edit; then
            ACTION=$opt
        elif [[ -z "${VM:-}" ]]; then
            VM=$opt
        elif [[ -z "${HYP:-}" ]] && in_array "$ACTION" console edit; then
            HYP=$opt
        else
            usage "Invalid argument '$opt'"
        fi
        ((idx++))
    done
fi

# Handle default action
ACTION=${ACTION:-view}

# Handle VM@HYP format for VM name
if [[ -z "$HYP" ]] && grep -Eq '^.+@[^@]+' <<< "$VM"; then
    HYP=$( cut -d '@' -f 2 <<< "$VM" )
    VM=$( cut -d '@' -f 1 <<< "$VM" )
fi

case "$ACTION" in
    view)
        URL="$EXTRANET_URL/hosting/servers"
        [[ -n "$VM" ]] && URL+="/$( urlencode "$VM" )"
        open_url "$URL"
        ;;
    console)
        [[ -z "$HYP" ]] && usage "Hypervisor name required"
        virt-viewer \
            --connect "qemu+ssh://eeadmin@$HYP.adm.easter-eggs.fr/system" \
            --domain-name "$VM"
        exit "$?"
        ;;
    edit)
        [[ -z "$HYP" ]] && usage "Hypervisor name required"
        virt-manager \
            --connect "qemu+ssh://eeadmin@$HYP.adm.easter-eggs.fr/system" \
            --show-domain-editor "$VM"
        exit "$?"
        ;;
    *)
        usage "Unknown action '$ACTION'"
esac

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