use super::Component;
use crate::action::Action;
use crate::components::battery::BatteryComponent;
use chrono::{DateTime, Local};
use color_eyre::Result;
use ratatui::text::ToSpan;
use ratatui::{prelude::*, widgets::*};
#[derive(Default)]
pub struct Header<'a> {
time: DateTime<Local>,
battery: BatteryComponent<'a>,
_interval: u32,
}
impl Component for Header<'_> {
fn update(&mut self, action: Action) -> Result<Option<Action>> {
match action {
Action::Tick => {
}
Action::Render => {
let _ = self.battery.update(Action::Render);
self.time = Local::now();
}
_ => {}
}
Ok(None)
}
fn draw(&mut self, frame: &mut Frame, area: Rect) -> Result<()> {
let [left, center, right] = Layout::horizontal(vec![
Constraint::Percentage(40),
Constraint::Percentage(20),
Constraint::Percentage(40),
])
.areas(area);
let binding = format!("brt {}", env!("CARGO_PKG_VERSION"));
let paragraph = Paragraph::new(binding.to_span()).left_aligned();
frame.render_widget(paragraph, left);
let binding = self.time.format("%H:%M:%S%.3f");
let paragraph = Paragraph::new(binding.to_span()).centered();
frame.render_widget(paragraph, center);
let paragraph = Paragraph::new(self.battery.line.clone()).right_aligned();
frame.render_widget(paragraph, right);
Ok(())
}
}