use anyhow::Result;
use crossterm::{
event::{self, Event, KeyEventKind},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{backend::CrosstermBackend, Terminal};
mod app;
mod bot;
mod cards;
mod config;
mod game;
mod meld;
mod storage;
mod ui;
use app::App;
fn main() -> Result<()> {
enable_raw_mode()?;
let mut stdout = std::io::stdout();
execute!(stdout, EnterAlternateScreen)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let result = run(&mut terminal);
disable_raw_mode()?;
execute!(terminal.backend_mut(), LeaveAlternateScreen)?;
terminal.show_cursor()?;
result
}
fn run<B: ratatui::backend::Backend>(terminal: &mut Terminal<B>) -> Result<()> {
let mut app = App::new()?;
loop {
app.update()?;
if app.should_quit() {
break;
}
terminal.draw(|frame| ui::draw(frame, &app))?;
if let Event::Key(key) = event::read()? {
if key.kind == KeyEventKind::Press {
app.handle_key(key)?;
if app.should_quit() {
break;
}
}
}
}
Ok(())
}