use std::collections::HashMap;
use std::time::SystemTime;
use serde::{Deserialize, Serialize};
use super::capabilities::ProviderCapabilities;
use super::config::{ComparisonCriterion, FilteringConfig};
use super::types::VerificationStatus;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DiscoveryEvent {
ProviderDiscovered {
provider_id: String,
capabilities: ProviderCapabilities,
timestamp: SystemTime,
},
CapabilityUpdated {
provider_id: String,
updated_capabilities: ProviderCapabilities,
timestamp: SystemTime,
},
ProviderUnavailable {
provider_id: String,
reason: String,
timestamp: SystemTime,
},
VerificationCompleted {
provider_id: String,
status: VerificationStatus,
timestamp: SystemTime,
},
ComparisonCompleted {
providers: Vec<String>,
results: ComparisonResults,
timestamp: SystemTime,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DiscoveryCommand {
DiscoverProviders,
VerifyProvider(String),
UpdateCapabilities(String),
CompareProviders(Vec<String>),
FilterProviders(FilteringConfig),
GetProviderInfo(String),
GetProviderRanking(Vec<ComparisonCriterion>),
GenerateReport(ReportType),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportType {
ProviderSummary,
CapabilityMatrix,
PerformanceComparison,
CostAnalysis,
SecurityAssessment,
ComprehensiveReport,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComparisonResults {
pub rankings: Vec<ProviderRanking>,
pub comparison_matrix: HashMap<String, HashMap<String, f64>>,
pub analysis_summary: AnalysisSummary,
pub recommendations: Vec<ProviderRecommendation>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderRanking {
pub provider_id: String,
pub overall_score: f64,
pub category_scores: HashMap<String, f64>,
pub rank: usize,
pub strengths: Vec<String>,
pub weaknesses: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalysisSummary {
pub key_findings: Vec<String>,
pub market_insights: Vec<String>,
pub trends: Vec<String>,
pub risk_factors: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderRecommendation {
pub provider_id: String,
pub recommendation_type: RecommendationType,
pub use_case: String,
pub confidence: f64,
pub reasoning: String,
pub cost_estimate: Option<CostEstimate>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RecommendationType {
BestOverall,
BestValue,
BestPerformance,
BestSecurity,
BestSupport,
BestForBeginners,
BestForResearch,
BestForProduction,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostEstimate {
pub monthly_cost: f64,
pub cost_breakdown: HashMap<String, f64>,
pub currency: String,
pub confidence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationResult {
pub status: VerificationStatus,
pub confidence: f64,
pub details: HashMap<String, String>,
pub verified_at: SystemTime,
pub verification_method: String,
}