use dioxus::prelude::*;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct OverviewStats {
    pub total_repositories: u64,
    pub total_findings: u64,
    pub critical_findings: u64,
    pub high_findings: u64,
    pub medium_findings: u64,
    pub low_findings: u64,
    pub total_sbom_entries: u64,
    pub total_cve_alerts: u64,
    pub total_issues: u64,
}

#[server]
pub async fn fetch_overview_stats() -> Result<OverviewStats, ServerFnError> {
    let resp = super::agent_client::agent_get("/api/v1/stats/overview")
        .await?
        .send()
        .await
        .map_err(|e| ServerFnError::new(e.to_string()))?;
    let body: serde_json::Value = resp
        .json()
        .await
        .map_err(|e| ServerFnError::new(e.to_string()))?;
    let stats: OverviewStats = serde_json::from_value(body["data"].clone()).unwrap_or_default();
    Ok(stats)
}
