use ratatui::{
layout::Rect,
style::{Color, Style},
text::{Line, Span},
widgets::{Gauge, Paragraph},
Frame,
};
use crate::models::CpuData;
use crate::ui::theme::Theme;
pub fn render_with_loading(f: &mut Frame, area: Rect, cpu: &CpuData, data_loaded: bool) {
if area.height < 2 {
return;
}
let label_area = Rect { height: 1, ..area };
let gauge_area = Rect {
y: area.y + 1,
height: 1,
..area
};
let theme = Theme::default_theme();
let pct_str = if data_loaded {
format!("{:.1}%", cpu.global_usage_pct)
} else {
"[cargando…]".to_string()
};
let load_str = if data_loaded {
format!(
" load: {:.2} {:.2} {:.2}",
cpu.load_avg[0], cpu.load_avg[1], cpu.load_avg[2]
)
} else {
String::new()
};
let label = Line::from(vec![
Span::styled("CPU", Style::default().fg(theme.accent)),
Span::styled(
format!(" {} {} cores{}", pct_str, cpu.core_count, load_str),
Style::default().fg(theme.text),
),
]);
f.render_widget(Paragraph::new(label), label_area);
let gauge = Gauge::default()
.gauge_style(
Style::default()
.fg(Theme::color_for_pct(cpu.global_usage_pct))
.bg(Color::Rgb(51, 52, 61)), )
.ratio((cpu.global_usage_pct / 100.0).clamp(0.0, 1.0))
.label("");
f.render_widget(gauge, gauge_area);
}