use ratatui::style::Color;
use crate::tui::tokens::compat;
pub fn provider_icon(provider: &str) -> &'static str {
match provider {
"anthropic" => "🧠",
"openai" => "🤖",
"mistral" => "🌀",
"groq" => "⚡",
"deepseek" => "🔬",
"gemini" => "💎",
"xai" => "𝕏",
"native" => "🦋",
"neo4j" => "🔷",
"github" => "🐙",
"slack" => "💬",
"perplexity" => "🔍",
"firecrawl" => "🔥",
"supadata" => "📊",
_ => "🔑",
}
}
pub fn provider_icon_ascii(provider: &str) -> &'static str {
match provider {
"anthropic" => "[A]",
"openai" => "[O]",
"mistral" => "[M]",
"groq" => "[G]",
"deepseek" => "[D]",
"gemini" => "[Gm]",
"xai" => "[X]",
"native" => "[N]",
"neo4j" => "[N4]",
"github" => "[GH]",
"slack" => "[Sl]",
"perplexity" => "[Px]",
"firecrawl" => "[Fc]",
"supadata" => "[Sd]",
_ => "[?]",
}
}
pub fn provider_color(provider: &str) -> Color {
match provider {
"anthropic" => compat::AMBER_500, "openai" => compat::EMERALD_500, "mistral" => compat::CYAN_500, "groq" => compat::YELLOW_500, "deepseek" => compat::BLUE_500, "gemini" => compat::VIOLET_500, "xai" => compat::SLATE_400, "native" => compat::LIME_500, "neo4j" => compat::SKY_500,
"github" => compat::SLATE_400,
"slack" => compat::FUCHSIA_500,
"perplexity" => compat::TEAL_500,
"firecrawl" => compat::ORANGE_500,
"supadata" => compat::INDIGO_500,
_ => compat::ZINC_500,
}
}
pub fn provider_display_name(provider: &str) -> &'static str {
match provider {
"anthropic" => "Claude (Anthropic)",
"openai" => "OpenAI",
"mistral" => "Mistral AI",
"groq" => "Groq",
"deepseek" => "DeepSeek",
"gemini" => "Google Gemini",
"xai" => "xAI Grok",
"native" => "Native (Local)",
"neo4j" => "Neo4j",
"github" => "GitHub",
"slack" => "Slack",
"perplexity" => "Perplexity",
"firecrawl" => "Firecrawl",
"supadata" => "Supadata",
_ => "Unknown",
}
}
pub fn provider_category(provider: &str) -> &'static str {
match provider {
"anthropic" | "openai" | "mistral" | "groq" | "deepseek" | "gemini" | "xai" => "LLM",
"native" => "Local",
"neo4j" | "github" | "slack" | "perplexity" | "firecrawl" | "supadata" => "MCP",
_ => "Unknown",
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_all_llm_providers_have_icons() {
let providers = [
"anthropic",
"openai",
"mistral",
"groq",
"deepseek",
"gemini",
"xai",
];
for provider in providers {
assert_ne!(
provider_icon(provider),
"🔑",
"{} should have a specific icon",
provider
);
}
}
#[test]
fn test_native_provider_has_icon() {
assert_ne!(
provider_icon("native"),
"🔑",
"native should have a specific icon"
);
assert_eq!(provider_icon("native"), "🦋");
}
#[test]
fn test_all_mcp_providers_have_icons() {
let providers = [
"neo4j",
"github",
"slack",
"perplexity",
"firecrawl",
"supadata",
];
for provider in providers {
assert_ne!(
provider_icon(provider),
"🔑",
"{} should have a specific icon",
provider
);
}
}
#[test]
fn test_gemini_icon() {
assert_eq!(provider_icon("gemini"), "💎");
}
#[test]
fn test_unknown_provider_icon() {
assert_eq!(provider_icon("unknown"), "🔑");
}
#[test]
fn test_provider_category() {
assert_eq!(provider_category("anthropic"), "LLM");
assert_eq!(provider_category("native"), "Local");
assert_eq!(provider_category("neo4j"), "MCP");
}
}