use std::io;
use ratatui::{backend::CrosstermBackend, Terminal};
use crate::{
app::{App, AppResult, AppState},
event::{Event, EventHandler},
handler::handle_key_events,
tui::Tui,
config::CommonColors,
};
use ratatui::style::Color;
pub mod app;
pub mod config;
pub mod event;
pub mod handler;
mod parser;
pub mod tui;
pub mod ui;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(short, long, default_value_t = String::from("tui"))]
action: String,
#[arg(required = true)]
filepath: String,
#[clap(long, short, action)]
light_mode: bool,
}
#[tokio::main]
async fn main() -> AppResult<()> {
let args = Args::parse();
if args.action == "tui" {
let colors = if !args.light_mode {
CommonColors::default()
} else {
CommonColors {
default_text: Color::Black,
highlight_text: Color::Gray,
header_text: Color::Black,
header_background: Color::Yellow,
highlight_background: Color::DarkGray,
info_preamble: Color::Blue,
info_text: Color::Cyan,
border_color: Color::Gray,
title_color: Color::Black,
alt_color_1: Color::Blue,
alt_color_2: Color::Magenta,
alt_color_3: Color::Red,
background_color: Color::White,
}
};
let mut app = App::new(args.filepath, Some(colors))?;
let backend = CrosstermBackend::new(io::stdout());
let terminal = Terminal::new(backend)?;
let events = EventHandler::new(250);
let mut tui = Tui::new(terminal, events);
tui.init()?;
while app.state == AppState::Running {
tui.draw(&mut app)?;
match tui.events.next().await? {
Event::Tick => app.tick(),
Event::Key(key_event) => handle_key_events(key_event, &mut app)?,
Event::Mouse(_) => {}
Event::Resize(_, _) => {}
}
}
tui.exit()?;
} else if args.action == "json" {
todo!()
} else {
println!("Invalid action: {}", args.action);
}
Ok(())
}