use std::error::Error;
use std::io::Write;
use crossterm::event::{
DisableBracketedPaste, DisableFocusChange, DisableMouseCapture, EnableBracketedPaste,
EnableFocusChange, EnableMouseCapture,
};
use crossterm::terminal::{
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
};
use crossterm::QueueableCommand;
use ratatui::backend::CrosstermBackend;
use crate::{BevyTerminal, Terminal};
pub(crate) fn create_terminal() -> Result<BevyTerminal, Box<dyn Error>> {
let stdout = std::io::stdout();
let backend = CrosstermBackend::new(stdout);
let terminal = ratatui::Terminal::new(backend)?;
Ok(Terminal(terminal))
}
pub fn initialize_terminal() -> Result<(), Box<dyn Error>> {
enable_raw_mode()?;
let mut stdout = std::io::stdout();
stdout.queue(EnterAlternateScreen)?;
stdout.queue(EnableBracketedPaste)?;
stdout.queue(EnableFocusChange)?;
stdout.queue(EnableMouseCapture)?;
stdout.flush()?;
Ok(())
}
pub fn teardown_terminal() -> Result<(), Box<dyn Error>> {
disable_raw_mode()?;
let mut stdout = std::io::stdout();
stdout.queue(LeaveAlternateScreen)?;
stdout.queue(DisableBracketedPaste)?;
stdout.queue(DisableFocusChange)?;
stdout.queue(DisableMouseCapture)?;
stdout.flush()?;
Ok(())
}