package wire

import (
	"strings"
)

func (c *Protocol) rotateDaemonTransportSessionGeneration() string {
	generation := "dtg_" + strings.TrimSpace(newSessionID("session"))
	c.mu.Lock()
	c.daemonTransportSessionGeneration = generation
	c.mu.Unlock()
	return generation
}

func (c *Protocol) currentDaemonTransportSessionGeneration() string {
	c.mu.Lock()
	defer c.mu.Unlock()
	if strings.TrimSpace(c.daemonTransportSessionGeneration) == "" {
		c.daemonTransportSessionGeneration = "dtg_" + strings.TrimSpace(newSessionID("session"))
	}
	return strings.TrimSpace(c.daemonTransportSessionGeneration)
}

func (c *Protocol) clearDaemonTransportSessionGeneration() {
	c.mu.Lock()
	c.daemonTransportSessionGeneration = ""
	c.mu.Unlock()
}

func (c *Protocol) daemonTransportReady() daemonTransportReadyMsg {
	registry := c.remoteEndpointRegistry
	if registry == nil {
		registry = defaultDesktopRemoteEndpointRegistry()
	}
	return daemonTransportReadyMsg{
		SchemaVersion:              daemonTransportSchemaVersion,
		SessionGeneration:          c.currentDaemonTransportSessionGeneration(),
		MaxElasticRequestLinks:     defaultMaxElasticRequestLinks,
		HardMaxElasticRequestLinks: defaultHardMaxElasticRequestLinks,
		SupportedLinkModes:         []string{"session", "elastic_request"},
		EndpointRegistryVersion:    defaultEndpointRegistryVersion,
		SupportedEndpoints:         registry.supportedEndpoints(),
	}
}
