use std::{
error::Error,
io::{stdout, Stdout},
};
use crossterm::{
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::prelude::CrosstermBackend;
pub type WidgetBackend = CrosstermBackend<Stdout>;
pub type WidgetFrame<'a> = ratatui::Frame<'a, CrosstermBackend<Stdout>>;
pub type WidgetTerminal = ratatui::Terminal<WidgetBackend>;
pub fn setup_terminal() -> Result<WidgetTerminal, Box<dyn Error>> {
enable_raw_mode()?;
let mut stdout = stdout();
execute!(stdout, EnterAlternateScreen)?;
let backend = CrosstermBackend::new(stdout);
let terminal = WidgetTerminal::new(backend)?;
Ok(terminal)
}
pub fn restore_terminal(mut terminal: WidgetTerminal) -> Result<(), Box<dyn Error>> {
disable_raw_mode()?;
execute!(terminal.backend_mut(), LeaveAlternateScreen)?;
Ok(())
}
pub fn reset_terminal() -> Result<(), Box<dyn Error>> {
disable_raw_mode()?;
execute!(stdout(), LeaveAlternateScreen)?;
Ok(())
}