use std::io::{stdout, Stdout};
use anyhow::Result;
use crossterm::{
event::{DisableMouseCapture, EnableMouseCapture, KeyboardEnhancementFlags, PushKeyboardEnhancementFlags, PopKeyboardEnhancementFlags},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{backend::CrosstermBackend, Terminal};
pub type Tui = Terminal<CrosstermBackend<Stdout>>;
pub fn init() -> Result<Tui> {
enable_raw_mode()?;
let mut stdout = stdout();
let _ = execute!(
stdout,
EnterAlternateScreen,
EnableMouseCapture,
PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES)
);
execute!(stdout, EnterAlternateScreen)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
terminal.hide_cursor()?;
terminal.clear()?;
Ok(terminal)
}
pub fn restore() -> Result<()> {
let mut stdout = stdout();
let _ = execute!(stdout, PopKeyboardEnhancementFlags);
execute!(stdout, DisableMouseCapture, LeaveAlternateScreen)?;
disable_raw_mode()?;
Ok(())
}