use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataPointDto {
pub timestamp: String,
pub values: BTreeMap<String, f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiscoveryConfigDto {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_effect_samples: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_regimes: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub window_size: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub window_step: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoverEffectsRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub config: Option<DiscoveryConfigDto>,
pub data: Vec<DataPointDto>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parent_sort_id: Option<String>,
pub target_feature: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HorizonDto {
pub confidence: f64,
pub horizon: f64,
pub score: f64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiscoverEffectsResponse {
#[serde(default)]
pub discovered_horizons: Vec<HorizonDto>,
pub effects_extracted: u64,
pub processing_time_ms: u64,
pub regimes_discovered: u64,
pub root_sort_id: String,
#[serde(default)]
pub sort_ids: BTreeMap<String, String>,
pub success: bool,
pub terms_created: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictFromDiscoveryRequest {
pub current_values: BTreeMap<String, f64>,
pub discovery_sort_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_similarity: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub top_k: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EffectPredictionDto {
pub confidence: f64,
pub mean: f64,
pub std_dev: f64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PredictFromDiscoveryResponse {
pub avg_similarity: f64,
#[serde(default)]
pub predictions: BTreeMap<String, EffectPredictionDto>,
pub query_time_ms: u64,
pub similar_terms: u64,
pub success: bool,
}