package setup

import (
	"testing"
)

func TestBuildServerHTTPSURL_PortResolution(t *testing.T) {
	// HTTPS_PORT must be unset for the env-var path tests to be
	// meaningful. t.Setenv("HTTPS_PORT", "") clears it for the duration
	// of each subtest.

	tests := []struct {
		name         string
		targetURL    string
		envHTTPSPort string
		want         string
	}{
		{
			name:         "https with explicit port wins over HTTPS_PORT env",
			targetURL:    "https://soundtouch.fritz.box:443",
			envHTTPSPort: "8443",
			want:         "https://soundtouch.fritz.box:443/health",
		},
		{
			name:      "https without explicit port uses 443",
			targetURL: "https://soundtouch.fritz.box",
			want:      "https://soundtouch.fritz.box:443/health",
		},
		{
			name:         "http URL falls back to HTTPS_PORT env var",
			targetURL:    "http://aftertouch.local:8000",
			envHTTPSPort: "9443",
			want:         "https://aftertouch.local:9443/health",
		},
		{
			name:      "http URL with no env var defaults to 8443",
			targetURL: "http://aftertouch.local:8000",
			want:      "https://aftertouch.local:8443/health",
		},
		{
			name:      "invalid URL returns empty",
			targetURL: "::not-a-url",
			want:      "",
		},
		{
			name:      "URL with no hostname returns empty",
			targetURL: "http://",
			want:      "",
		},
	}

	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			if tc.envHTTPSPort != "" {
				t.Setenv("HTTPS_PORT", tc.envHTTPSPort)
			} else {
				t.Setenv("HTTPS_PORT", "")
			}

			m := &Manager{}

			got := m.buildServerHTTPSURL(tc.targetURL)
			if got != tc.want {
				t.Errorf("buildServerHTTPSURL(%q) = %q, want %q", tc.targetURL, got, tc.want)
			}
		})
	}
}
