use std::io;
use crossterm::{
cursor, event, execute,
terminal::{self, EnterAlternateScreen, LeaveAlternateScreen},
};
use crate::app::event_loop::run;
use crate::cli::parse::Config;
pub(crate) fn run_direct(config: &Config) -> anyhow::Result<()> {
terminal::enable_raw_mode()?;
let mut stdout = io::stdout();
execute!(
stdout,
EnterAlternateScreen,
event::EnableMouseCapture,
event::EnableFocusChange,
event::PushKeyboardEnhancementFlags(
event::KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES,
),
cursor::Hide
)?;
let result = run(&mut stdout, config);
let _ = execute!(
io::stdout(),
event::PopKeyboardEnhancementFlags,
event::DisableFocusChange,
cursor::Show,
event::DisableMouseCapture,
LeaveAlternateScreen
);
let _ = terminal::disable_raw_mode();
result
}