#!/bin/bash

# user - environment dims
zone_id=e53ee174-89aa-4564-adba-6b0988c20464
phy_name_prefix=Netwrk
phy_tag_prefix=cloudbr

# starting and ending network vlans
phy_num_start=2
phy_num_end=97

# ------------------------
cmk_api_call() {
    local jq_filter="$1"
    shift 1
    local cmd=(cmk "$@")     # remaining args are the CMK call

    # Run the CMK API call (capture stdout+stderr)
    local cmd_output
    cmd_output="$("${cmd[@]}" 2>&1)"
    if ! echo "$cmd_output" | jq empty >/dev/null 2>&1; then
        log "cmk API returned non-JSON response: $cmd_output"
        return 1
    fi

    # Extract value
    local value
    value=$(echo "$cmd_output" | jq -r "$jq_filter // empty")
    # if value is empty
    if [[ -z "$value" ]]; then
        log "cmk returned empty value for jq filter: '$jq_filter' on output: $cmd_output"
        return 1
    fi
    echo "$value"
    return 0
}

cmk_api_dialog_msg() {
    local msg="$1"
    local sleep_time="${3:-4}"
    sleep "$sleep_time"
    return 1
}

# system dims
cli=cmk

# loop
for run in $(seq $phy_num_start $phy_num_end); do
  # loop variables
  phy_num=$run
  phy_name_num_tmp="0${run}"
  echo "Starting VMNet${phy_name_num_tmp} ..."
  phy_name_num=${phy_name_num_tmp: -2}
  phy_name=${phy_name_prefix}${phy_name_num}
  phy_tag=${phy_tag_prefix}${phy_name_num}
  phy_vlans=${phy_num}-${phy_num}
  phy_cmd="create physicalnetwork name=${phy_name} zoneid=${zone_id} isolationmethods=VLAN tags=${phy_tag} vlan=${phy_vlans}"
  echo "Command: cmk ${phy_cmd}"
  phy_id=$(cmk_api_call '.physicalnetwork.id' $phy_cmd || cmk_api_dialog_msg "Failed to create network: ${run}")

  echo "Created physical network: ${phy_id}"
  cmk add traffictype traffictype=Guest physicalnetworkid=$phy_id
  echo "Added guest traffic"
  cmk update physicalnetwork state=Enabled id=$phy_id
  echo "Enabled physicalnetwork $run"

done
