use ratatui::{
layout::Rect,
style::{Color, Modifier, Style},
text::{Line, Span},
widgets::{Block, Borders, Paragraph, Wrap},
Frame,
};
use crate::models::{MessageState, MessageType};
pub fn draw_message_area(f: &mut Frame, message_state: &MessageState, area: Rect) {
let current_message = match message_state.get_current_message() {
Some(msg) => msg,
None => return, };
let required_height = 3;
if area.height < required_height {
return; }
let message_area = Rect {
x: area.x,
y: area.y.saturating_sub(required_height),
width: area.width,
height: required_height,
};
let style = get_message_style(current_message.message_type);
let message_text = current_message.display_text();
let content = Line::from(vec![Span::styled(message_text, style)]);
let block = Block::default()
.borders(Borders::ALL)
.title("Message")
.border_style(Style::default().fg(Color::Yellow));
let paragraph = Paragraph::new(vec![content])
.block(block)
.wrap(Wrap { trim: true });
f.render_widget(paragraph, message_area);
}
fn get_message_style(message_type: MessageType) -> Style {
match message_type {
MessageType::Error => Style::default()
.fg(Color::White)
.bg(Color::Red)
.add_modifier(Modifier::BOLD),
MessageType::Success => Style::default().fg(Color::Black).bg(Color::Green),
MessageType::Warning => Style::default().fg(Color::Black).bg(Color::Yellow),
MessageType::Info => Style::default().fg(Color::White).bg(Color::Blue),
}
}