// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1

package tfgen

import (
	"fmt"
)

// digestOutputs takes the data extracted from terraform output variables and
// updates various fields on the topology.Topology with that data.
func (g *Generator) digestOutputs(out *Outputs) error {
	for clusterName, nodeMap := range out.Nodes {
		cluster, ok := g.topology.Clusters[clusterName]
		if !ok {
			return fmt.Errorf("found output cluster that does not exist: %s", clusterName)
		}
		for nid, nodeOut := range nodeMap {
			node := cluster.NodeByID(nid)
			if node == nil {
				return fmt.Errorf("found output node that does not exist in cluster %q: %s", nid, clusterName)
			}

			if node.DigestExposedPorts(nodeOut.Ports) {
				g.logger.Info("discovered exposed port mappings",
					"cluster", clusterName,
					"node", nid.String(),
					"ports", nodeOut.Ports,
				)
			}
		}
	}

	for netName, proxyPort := range out.ProxyPorts {
		changed, err := g.topology.DigestExposedProxyPort(netName, proxyPort)
		if err != nil {
			return err
		}
		if changed {
			g.logger.Info("discovered exposed forward proxy port",
				"network", netName,
				"port", proxyPort,
			)
		}
	}

	return nil
}