#!/bin/bash
CURL="/usr/bin/curl"
SYSCREDS="/etc/default/ngcp-api"
USERCREDS="${HOME}/.ngcp-api"
TOOLS="/usr/share/ngcp-panel-tools/ngcp-api.inc"

usage () {
  cat << EOF
Usage: $0 [OPTIONS] <url> [content-type]

sends a put request to NGCP REST API

OPTIONS:
  -h this help
  -v verbose mode
  -f read the input info from a file instead of read stdin
EOF
  exit 1
}

if [ -z "${APIUSER}" ]; then
  if [ -f "${TOOLS}" ]; then
    # shellcheck source=./tools/ngcp-api.inc
    source "${TOOLS}"

    importcreds "${USERCREDS}" 0600
    if [ -z "${APIUSER}" ]; then
      importcreds "${SYSCREDS}" 0440
      APIUSER="${AUTH_SYSTEM_LOGIN}:${AUTH_SYSTEM_PASSWORD}"
      APIREALM=(-H 'NGCP-UserAgent: NGCP::API::Client')
    fi
  fi
  if [ -z "${APIUSER}" ]; then
    echo "Error: no authentication credentials found" >&2
    exit 1
  fi
fi
CURL_OPTS=()
INPUT=(-T -)

while getopts "f:hv" OPTION
do
  case ${OPTION} in
    h)
      usage
      ;;
    f)
      INPUT=()
      FILE_INPUT=(--data-binary "@${OPTARG}")
      if [ ! -f "${OPTARG}" ]; then
        echo "No '${OPTARG}' file found"
        usage
      fi
      ;;
    v)
      CURL_OPTS+=(--verbose)
      ;;
    ?)
      usage
      ;;
  esac
done
shift $((OPTIND - 1))

URL="$1"
if [ -z "${URL}" ] ; then
  usage
fi
validateurl "$URL"
CTYPE=${2:-application/json}

${CURL} -i "${CURL_OPTS[@]}" -X PUT \
  "${APIREALM[@]}" \
  -H 'Connection: close' -H 'Prefer: return=representation' \
  -H "Content-Type: ${CTYPE}" \
  --user "${APIUSER}" --insecure "${FILE_INPUT[@]}" "${URL}" "${INPUT[@]}"
