use clap::Parser;

mod app;
mod chat;
mod proto;

#[derive(Parser)]
/// simple owncast chat client to never leave your terminal
struct Args {
	/// owncast server to connect to
	server: String,

	/// access token to use for login
	#[arg(long)]
	token: Option<String>,
}

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
	let args = Args::parse();

	// setup terminal
	crossterm::terminal::enable_raw_mode()?;
	let mut stdout = std::io::stdout();
	crossterm::execute!(
		stdout,
		crossterm::terminal::EnterAlternateScreen
	)?;
	let backend = ratatui::backend::CrosstermBackend::new(stdout);
	let mut terminal = ratatui::Terminal::new(backend)?;
	terminal.hide_cursor()?;

	let res = app::run(&mut terminal, args).await;

	// restore terminal
	crossterm::terminal::disable_raw_mode()?;
	crossterm::execute!(
		terminal.backend_mut(),
		crossterm::terminal::LeaveAlternateScreen,
	)?;
	terminal.show_cursor()?;

	if let Err(e) = res {
		eprintln!("[!] Error executing app: {:?}", e);
	}

	Ok(())
}