package service

import (
	"context"
	"strings"

	"github.com/prism/proxy/internal/country"
)

func (a *App) ProxyDisplayNames(ctx context.Context) (map[string]string, error) {
	nodes, err := a.Store.ListProxyNodes(ctx, "", nil)
	if err != nil {
		return nil, err
	}
	groups, err := a.Store.ListProxyGroups(ctx)
	if err != nil {
		return nil, err
	}
	m := map[string]string{
		"DIRECT": "DIRECT",
		"REJECT": "REJECT",
	}
	for _, n := range nodes {
		m[n.RuntimeName] = n.Name
	}
	for _, g := range groups {
		m[g.RuntimeName] = g.Name
	}
	seen := map[string]bool{}
	for _, n := range nodes {
		if n.Country == "" || seen[n.Country] {
			continue
		}
		seen[n.Country] = true
		rn := country.GroupRuntime(n.Country)
		m[rn] = country.Name(n.Country) + "（国家池）"
	}
	return m, nil
}

func (a *App) PolicyGroupRuntimes(ctx context.Context) (map[string]bool, error) {
	groups, err := a.Store.ListProxyGroups(ctx)
	if err != nil {
		return nil, err
	}
	out := map[string]bool{
		"GLOBAL": true,
		"PROXY":  true,
	}
	for _, g := range groups {
		if g.Enabled {
			out[g.RuntimeName] = true
		}
	}
	return out, nil
}

func DisplayName(names map[string]string, key string) string {
	if key == "" {
		return ""
	}
	if name, ok := names[key]; ok && name != "" {
		return name
	}
	if strings.HasPrefix(key, "country_") {
		code := strings.TrimPrefix(key, "country_")
		return country.Name(code) + "（国家池）"
	}
	return key
}
