use std::io::{stdout, Stdout};
use crossterm::{
event::{DisableMouseCapture, EnableMouseCapture},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::prelude::*;
pub type Tui = Terminal<CrosstermBackend<Stdout>>;
pub fn init() -> color_eyre::Result<Tui> {
enable_raw_mode()?;
let mut out = stdout();
execute!(out, EnterAlternateScreen, EnableMouseCapture)?;
Ok(Terminal::new(CrosstermBackend::new(out))?)
}
pub fn restore() -> color_eyre::Result<()> {
let mut out = stdout();
execute!(out, LeaveAlternateScreen, DisableMouseCapture)?;
disable_raw_mode()?;
Ok(())
}
pub fn install_panic_hook() {
let (panic_hook, eyre_hook) = color_eyre::config::HookBuilder::default().into_hooks();
eyre_hook.install().expect("failed to install eyre hook");
let panic_hook = panic_hook.into_panic_hook();
std::panic::set_hook(Box::new(move |info| {
let _ = restore();
panic_hook(info);
}));
}