//go:build windows

package runtimeconfig

import (
	"os"
	"strings"

	"golang.org/x/sys/windows/registry"
)

func windowsRegistryPath() string {
	values := []string{
		readWindowsRegistryPath(registry.CURRENT_USER, `Environment`),
		readWindowsRegistryPath(registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Control\Session Manager\Environment`),
	}
	return strings.Join(filterRuntimePathValues(values), string(os.PathListSeparator))
}

func readWindowsRegistryPath(root registry.Key, path string) string {
	key, err := registry.OpenKey(root, path, registry.QUERY_VALUE)
	if err != nil {
		return ""
	}
	defer key.Close()

	for _, name := range []string{"Path", "PATH"} {
		value, valueType, err := key.GetStringValue(name)
		if err == nil {
			if valueType == registry.EXPAND_SZ {
				expanded, err := registry.ExpandString(value)
				if err == nil {
					return expanded
				}
			}
			return value
		}
	}
	return ""
}

func filterRuntimePathValues(values []string) []string {
	out := values[:0]
	for _, value := range values {
		value = strings.TrimSpace(value)
		if value != "" {
			out = append(out, value)
		}
	}
	return out
}
