#!/bin/bash
FACTS_DIR='/etc/ansible/facts.d'
FACT_FILE="${FACTS_DIR}/zerotier.fact"
NODE_STATUS=($(zerotier-cli status))
NETWORKS=$(zerotier-cli listnetworks | tail -n+2)

function file_content {
    if [ ! -z "$NETWORKS" ]; then
        network_count=$(echo "$NETWORKS" |wc -l)
        counter=1

        echo "{"
        echo "  \"node_id\":\"${NODE_STATUS[2]}\","
        echo "  \"networks\": {"
        while read -r; do
            network=($REPLY)
            echo "    \"${network[2]}\": {"
            echo "        \"status\":\"${network[5]}\","
            echo "        \"device\":\"${network[7]}\""

            if [ "$counter" -eq "$network_count" ]; then
                echo "    }"
            else
                echo "    },"
            fi
            ((counter++))
        done <<< $NETWORKS
        echo "  }"
        echo "}"
    else
        echo "{\"node_id\":\"${NODE_STATUS[2]}\",\"networks\":{}}"
    fi
}

if [ ! -d "$FACTS_DIR" ]; then
    mkdir -p $FACTS_DIR
fi

file_content > $FACT_FILE


# TO-DO
# Handle different states than "OK". Other statuses can mess up positions.
