use crate::styles::theme;
use anyhow::Result;
use ratatui::prelude::*;
use ratatui::widgets::{Block, Borders, Paragraph, Wrap};
pub struct MessageBox;
impl MessageBox {
pub fn render(
frame: &mut Frame,
area: Rect,
message: &str,
title: Option<&str>,
color: Option<Color>,
) -> Result<()> {
let t = theme();
let title_text = title.unwrap_or("Message");
let border_color = color.unwrap_or(t.primary);
let is_error = message.to_lowercase().contains("error")
|| message.to_lowercase().contains("failed")
|| message.to_lowercase().contains("fail");
let final_color = if is_error { t.error } else { border_color };
let final_title = if is_error { "Error" } else { title_text };
let message_block = Block::default()
.borders(Borders::ALL)
.border_type(t.border_type(false))
.title(format!(" {final_title} "))
.title_alignment(Alignment::Center)
.border_style(Style::default().fg(final_color))
.padding(ratatui::widgets::Padding::new(2, 2, 2, 2));
let message_para = Paragraph::new(message)
.style(t.text_style())
.wrap(Wrap { trim: true })
.block(message_block);
frame.render_widget(message_para, area);
Ok(())
}
#[allow(dead_code)]
pub fn render_error(frame: &mut Frame, area: Rect, message: &str) -> Result<()> {
let t = theme();
Self::render(frame, area, message, Some("Error"), Some(t.error))
}
#[allow(dead_code)]
pub fn render_status(frame: &mut Frame, area: Rect, message: &str) -> Result<()> {
let t = theme();
Self::render(frame, area, message, Some("Status"), Some(t.primary))
}
#[allow(dead_code)]
pub fn render_success(frame: &mut Frame, area: Rect, message: &str) -> Result<()> {
let t = theme();
Self::render(frame, area, message, Some("Success"), Some(t.success))
}
}