use std::io::{self, Stdout};
use crossterm::event::{
DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture,
};
use crossterm::execute;
use crossterm::terminal::{
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
};
use ratatui::backend::CrosstermBackend;
use ratatui::Terminal;
use crate::terminal::TerminalCapabilities;
pub type AppTerminal = Terminal<CrosstermBackend<Stdout>>;
pub fn init_terminal(caps: &TerminalCapabilities) -> io::Result<AppTerminal> {
enable_raw_mode()?;
let mut stdout = io::stdout();
execute!(stdout, EnterAlternateScreen)?;
if caps.supports_mouse {
execute!(stdout, EnableMouseCapture)?;
}
if caps.supports_bracketed_paste {
execute!(stdout, EnableBracketedPaste)?;
}
let backend = CrosstermBackend::new(stdout);
Terminal::new(backend)
}
pub fn restore_terminal() -> io::Result<()> {
disable_raw_mode()?;
execute!(
io::stdout(),
LeaveAlternateScreen,
DisableMouseCapture,
DisableBracketedPaste
)?;
Ok(())
}