use ratatui::Terminal;
use ratatui::backend::TestBackend;
use ratatui::buffer::Buffer;
use ratatui::text::Line;
use crate::lookout::app::App;
pub fn rendered(line: &Line<'static>) -> String {
line.spans
.iter()
.map(|span| span.content.as_ref())
.collect()
}
pub fn render_all(lines: &[Line<'static>]) -> String {
lines.iter().map(rendered).collect::<Vec<_>>().join("\n")
}
#[track_caller]
pub fn row_starting_with(lines: &[Line<'static>], prefix: &str) -> String {
lines
.iter()
.map(rendered)
.find(|line| line.trim_start().starts_with(prefix))
.unwrap_or_else(|| panic!("no row starts with {prefix:?}"))
}
#[track_caller]
pub fn row_containing(buffer: &Buffer, needle: &str) -> String {
rows_of(buffer)
.into_iter()
.find(|row| row.contains(needle))
.unwrap_or_else(|| panic!("no row contains {needle:?}"))
}
pub fn render(app: &App, width: u16, height: u16) -> Buffer {
let mut terminal = Terminal::new(TestBackend::new(width, height)).unwrap();
terminal
.draw(|frame| crate::lookout::view::draw(app, frame))
.unwrap();
terminal.backend().buffer().clone()
}
pub fn rows_of(buffer: &Buffer) -> Vec<String> {
crate::lookout::frames::render_text(buffer)
.lines()
.map(str::to_string)
.collect()
}