// SPDX-License-Identifier: Apache-2.0
import * as yaml from 'yaml';
import * as constants from './constants.js';
import { Templates } from './templates.js';
export class NodeOverridesModel {
    interfaceBindings = [];
    endpointOverrides = [];
    constructor(nodeAliases, networkNodeServiceMap) {
        for (const nodeAlias of nodeAliases) {
            const nodeId = +networkNodeServiceMap.get(nodeAlias).nodeId;
            const localClusterPort = +constants.HEDERA_NODE_EXTERNAL_GOSSIP_PORT;
            const localClusterHostName = Templates.renderNetworkHeadlessSvcName(nodeAlias);
            this.interfaceBindings.push({ nodeId, hostname: localClusterHostName, port: localClusterPort });
            // TODO future, add endpointOverrides for addresses external to cluster in multi-cluster support situation
            //  this.endpointOverrides.push({nodeId, hostname: externalHostname, port: externalPort});
        }
    }
    /**
     * Converts the model to YAML as expected to be consumed inside node
     * @returns the raw YAML as string
     *
     * @example
     * gossip:
     *   interfaceBindings:
     *     - { "nodeId": 0, "hostname": "10.10.10.1", "port": 1234 }
     *     - { "nodeId": 3, "hostname": "2001:db8:3333:4444:5555:6666:7777:8888", "port": 1237 }
     *   endpointOverrides:
     *     - { "nodeId": 5, "hostname": "10.10.10.11", "port": 1238 }
     */
    toYAML() {
        const gossipData = {};
        if (this.interfaceBindings.length > 0) {
            gossipData.interfaceBindings = this.interfaceBindings.map(d => JSON.stringify(d));
        }
        if (this.endpointOverrides.length > 0) {
            gossipData.endpointOverrides = this.endpointOverrides.map(d => JSON.stringify(d));
        }
        return yaml.stringify({ gossip: gossipData }).replaceAll("'", '');
    }
}
//# sourceMappingURL=node-overrides-model.js.map