use crate::db::config::Config;
use ratatui::buffer::Buffer;
use ratatui::layout::{Constraint, Layout, Margin, Rect};
use ratatui::style::{Color, Style};
use ratatui::widgets::{Block, Widget};
use std::str::FromStr;
pub struct AppLayout;
impl AppLayout {
pub fn calculate_main_layout(area: Rect) -> (Rect, Rect, Rect, Rect, Rect) {
let padded_area = area.inner(Margin {
horizontal: 2, vertical: 1, });
let header_height = if padded_area.height < 15 {
Constraint::Length(3)
} else if padded_area.height < 25 {
Constraint::Length(8)
} else {
Constraint::Percentage(20)
};
let main_layout = Layout::vertical([
header_height,
Constraint::Min(10), ]);
let [header_area, content_area] = main_layout.areas(padded_area);
let header_layout = Layout::horizontal([Constraint::Min(50), Constraint::Length(35)]);
let [logo_area, db_selector_area] = header_layout.areas(header_area);
let selector_layout = Layout::vertical([Constraint::Percentage(56), Constraint::Fill(1)]);
let [_, closed_selector_area] = selector_layout.areas(db_selector_area);
let content_layout =
Layout::horizontal([Constraint::Percentage(30), Constraint::Percentage(70)]);
let [lists_area, items_area] = content_layout.areas(content_area);
(
lists_area,
items_area,
logo_area,
db_selector_area,
closed_selector_area,
)
}
pub fn render_background(config: Config, area: Rect, buf: &mut Buffer) {
let fg = config.foreground();
let bg = config.background();
let background_color = Color::from_str(bg).unwrap();
let foreground_color = Color::from_str(fg).unwrap();
let background =
Block::default().style(Style::default().bg(background_color).fg(foreground_color));
background.render(area, buf);
}
}