use std::fmt::Write;
use orfail::OrFail;
use crate::{mame::TerminalFrame, state::State};
#[derive(Debug)]
pub struct StatusLineRenderer;
impl StatusLineRenderer {
pub fn render(&self, state: &State, frame: &mut TerminalFrame) -> orfail::Result<()> {
let style = tuinix::TerminalStyle::new().reverse().bold();
let reset = tuinix::TerminalStyle::RESET;
let filler = " ".repeat(frame.size().cols);
let dirty = if state.buffer.dirty { '*' } else { ' ' };
let path = state.path.display();
let cursor = state.cursor_position();
let row = cursor.row + 1; let col = cursor.col + 1; let rows = state.buffer.rows();
let cols = state.buffer.cols(cursor.row);
let context = state.context.group_path();
write!(
frame,
"{style} {dirty} [{path}:{row}({rows}):{col}({cols})] {context}{}{reset}",
filler
)
.or_fail()?;
Ok(())
}
}