package main

import (
	"fmt"
	"sort"
	"strings"

	"source.monogon.dev/go/clitable"
	"source.monogon.dev/metropolis/node/core/identity"
	apb "source.monogon.dev/metropolis/proto/api"
	cpb "source.monogon.dev/metropolis/proto/common"
)

func nodeEntry(n *apb.Node) clitable.Entry {
	res := clitable.Entry{}

	res.Add("node id", identity.NodeID(n.Pubkey))
	state := n.State.String()
	state = strings.ReplaceAll(state, "NODE_STATE_", "")
	res.Add("state", state)
	address := "unknown"
	if n.Status != nil && n.Status.ExternalAddress != "" {
		address = n.Status.ExternalAddress
	}
	res.Add("address", address)
	res.Add("health", n.Health.String())

	var roles []string
	if n.Roles.ConsensusMember != nil {
		roles = append(roles, "ConsensusMember")
	}
	if n.Roles.KubernetesController != nil {
		roles = append(roles, "KubernetesController")
	}
	if n.Roles.KubernetesWorker != nil {
		roles = append(roles, "KubernetesWorker")
	}
	sort.Strings(roles)
	res.Add("roles", strings.Join(roles, ","))

	tpm := "unk"
	switch n.TpmUsage {
	case cpb.NodeTPMUsage_NODE_TPM_PRESENT_AND_USED:
		tpm = "yes"
	case cpb.NodeTPMUsage_NODE_TPM_PRESENT_BUT_UNUSED:
		tpm = "unused"
	case cpb.NodeTPMUsage_NODE_TPM_NOT_PRESENT:
		tpm = "no"
	}
	res.Add("tpm", tpm)

	tshs := n.TimeSinceHeartbeat.GetSeconds()
	res.Add("heartbeat", fmt.Sprintf("%ds", tshs))

	return res
}
