package config import "strings" // DetectProtocol infers protocol from a share/proxy URI or config body. func DetectProtocol(raw string) Protocol { lower := strings.ToLower(strings.TrimSpace(raw)) switch { case strings.HasPrefix(lower, "hysteria2://"), strings.HasPrefix(lower, "hy2://"): return ProtocolHysteria2 case strings.HasPrefix(lower, "vless://"): return ProtocolVLESS case strings.HasPrefix(lower, "vmess://"): return ProtocolVMess case strings.HasPrefix(lower, "trojan://"): return ProtocolTrojan case strings.HasPrefix(lower, "awg://"), strings.HasPrefix(lower, "amneziawg://"), strings.HasPrefix(lower, "wireguard://"): return ProtocolAWG case strings.Contains(lower, "[interface]") && strings.Contains(lower, "privatekey"): return ProtocolAWG case strings.HasPrefix(lower, "naive+"), strings.HasPrefix(lower, "naive://"), strings.HasPrefix(lower, "https://"), strings.HasPrefix(lower, "quic://"), strings.HasPrefix(lower, "http://"): return ProtocolNaive default: return "" } }