package config

import (
	"os"
	"strings"
)

// TemporalConfig holds Temporal cluster configuration.
type TemporalConfig struct {
	HostPort  string // default: 127.0.0.1:7233
	Namespace string // default: production
	TLSCert   string // env: TEMPORAL_TLS_CERT (file path)
	TLSKey    string // env: TEMPORAL_TLS_KEY (file path)
}

// AppConfig holds application configuration.
type AppConfig struct {
	Temporal         TemporalConfig
	AnthropicAPIKey  string
}

// LoadConfig loads application configuration from environment variables.
func LoadConfig() (AppConfig, error) {
	cfg := AppConfig{
		Temporal: TemporalConfig{
			HostPort:  addDefaultPort(getEnvOrDefault("TEMPORAL_HOSTPORT", "127.0.0.1:7233")),
			Namespace: getEnvOrDefault("TEMPORAL_NAMESPACE", "poimen-harness"),
			TLSCert:   os.Getenv("TEMPORAL_TLS_CERT"),
			TLSKey:    os.Getenv("TEMPORAL_TLS_KEY"),
		},
		AnthropicAPIKey: os.Getenv("ANTHROPIC_API_KEY"),
	}

	return cfg, nil
}

func getEnvOrDefault(key, defaultVal string) string {
	if val := os.Getenv(key); val != "" {
		return val
	}
	return defaultVal
}

func addDefaultPort(hostPort string) string {
	// If no port specified, add default port 7233
	if !strings.Contains(hostPort, ":") {
		return hostPort + ":7233"
	}
	return hostPort
}
