[
  ${
    range(
      env(
        'CONSUL_NODE_COUNT',
        Math.floor(
          (
            Math.random() * env('CONSUL_NODE_MAX', 10)
          ) + parseInt(env('CONSUL_NODE_MIN', 1))
        )
      )
    ).map(
      function(item, i)
      {
        const peerNameString = i === 0 ? '"PeerName": "billing",' : '"PeerName": "",'
        const isSyntheticNode = env('CONSUL_AGENTLESS_ENABLED') ? fake.helpers.randomize([true, false, false, false]) : false
        return `
          {
            "ID":"${fake.random.uuid()}",
            "Node":"node-${i}",
            ${env('CONSUL_PEERINGS_ENABLE') ? peerNameString : ''}
            "Address":"${fake.internet.ip()}",
            "TaggedAddresses":{
              "lan":"${fake.internet.ip()}",
              "wan":"${fake.internet.ip()}"
            },
            "Meta": {
              "consul-network-segment":"",
              ${isSyntheticNode ? `` : `
              "consul-version": "${env('CONSUL_VERSION') ? fake.helpers.randomize([env('CONSUL_VERSION'),"1.10.4","1.15.2", "1.17.8","1.7.2","1.12.4", "1.17.2","1.0.9","2.0.2"]) : fake.helpers.randomize(["1.10.4","1.15.2", "1.17.8","1.7.2","1.12.4", "1.17.2","1.0.9","2.0.2"])  }",
              `}
              "synthetic-node": ${isSyntheticNode}
            },
            "Services":[
                ${
                    range(fake.random.number(4) + 1).map(
                        function(item, i) {
                        const service = `service-${i}`;
                        return `
                            {
                                "ID":"${service}",
                                "Service":"${service}",
                                "Tags":[
                                    ${
                                        range(env('CONSUL_TAG_COUNT', fake.random.number(10))).map(
                                            function(item, i)
                                            {
                                                return `"${fake.hacker.noun()}"`;
                                            }
                                        )
                                    }
                                ],
                                "Address":"",
                                "Port":${fake.random.number({min: 0, max: 65535})},
                                "EnableTagOverride":false,
                                "CreateIndex":5,
                                "ModifyIndex":5
                            }
                        `;
                        }
                    )
                }
            ],
            "Checks":[
            ${
                range(env('CONSUL_CHECK_COUNT', fake.random.number(9) + 1)).map(
                    function(item, j)
                    {
                        const passing = i > 7 || j > fake.random.number(4);
                        return `
                            {
                                "Node":"node-${i}",
                                "CheckID":"${fake.hacker.noun()}Health",
                                "Name":"${fake.hacker.noun()} Status",
                                "Type": "${fake.helpers.randomize(['script', 'http', 'tcp', 'ttl', 'docker', 'grpc', 'alias'])}",
                                "Status":"${ passing ? "passing" : fake.helpers.randomize(['warning', 'critical'])}",
                                "Notes":"${fake.lorem.paragraph()}",
                                "Output":"${fake.internet.ipv6()} ${fake.internet.protocol()}://${fake.internet.userName()}:${fake.internet.password()}@${fake.internet.domainName()} ${fake.internet.userAgent()}",
                                "ServiceID":"",
                                "ServiceName":"",
                                "ServiceTags":["Tag"],
                                "Definition":{},
                                "CreateIndex":5,
                                "ModifyIndex":5
                            }
                        `;

                    }
                )
            }
            ]
          }
        `;
      }
    )
  }
]
