package mihomoapi

var leafOutbounds = map[string]bool{
	"DIRECT":      true,
	"REJECT":      true,
	"REJECT-DROP": true,
}

// ResolveLeafOutbound returns the actual proxy node from a Mihomo chains path.
// Policy groups are appended after the leaf dial, so the last chain entry is often a group name.
func ResolveLeafOutbound(chains []string, policyGroups map[string]bool) string {
	if len(chains) == 0 {
		return ""
	}
	for i := len(chains) - 1; i >= 0; i-- {
		name := chains[i]
		if leafOutbounds[name] {
			return name
		}
		if policyGroups != nil && policyGroups[name] {
			continue
		}
		return name
	}
	return chains[len(chains)-1]
}

func ChainStringsFromAny(raw any) []string {
	arr, ok := raw.([]any)
	if !ok {
		return nil
	}
	out := make([]string, 0, len(arr))
	for _, item := range arr {
		if s, ok := item.(string); ok && s != "" {
			out = append(out, s)
		}
	}
	return out
}
