//! Custom/fallback vendor definition
//!
//! This vendor is used when the agent type is unknown or custom.
//! All mappings pass through unchanged.

use super::{MappingResult, ModeMapping, ModelMapping, VendorInfo};
use crate::connectors::acp::config::ConnectorAgentType;

/// Custom vendor implementation (pass-through)
pub struct CustomVendor;

impl VendorInfo for CustomVendor {
    fn id(&self) -> &'static str {
        "custom"
    }

    fn display_name(&self) -> &'static str {
        "Custom"
    }

    fn agent_type(&self) -> ConnectorAgentType {
        ConnectorAgentType::Custom
    }

    fn cli_command(&self) -> &'static str {
        ""
    }

    fn mode_mappings(&self) -> &'static [ModeMapping] {
        &[]
    }

    fn model_mappings(&self) -> &'static [ModelMapping] {
        &[]
    }

    // Override to pass through without warnings
    fn map_mode(&self, gateway_mode: &str) -> MappingResult {
        MappingResult::exact(gateway_mode)
    }

    fn map_model(&self, gateway_model: &str) -> MappingResult {
        MappingResult::exact(gateway_model)
    }

    fn reverse_map_mode(&self, vendor_mode: &str) -> MappingResult {
        MappingResult::exact(vendor_mode)
    }

    fn reverse_map_model(&self, vendor_model: &str) -> MappingResult {
        MappingResult::exact(vendor_model)
    }

    fn icon_path(&self) -> &'static str {
        "acp"
    }
}
