use log::{log_enabled, info, Level};

extern crate env_logger;

use dotenv::dotenv;

use lichessbot::lichessbot::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>>{
	dotenv().ok();
	env_logger::init();

	let bot = Box::leak(Box::new(LichessBot::new()
		.uci_opt("Move Overhead", 500)
		.uci_opt("Threads", 4)
		.uci_opt("Hash", 128)
		.uci_opt("Contempt", -25)
		.enable_classical(false)
		.enable_rapid(false)
		.disable_blitz(false)
		.disable_bullet(false)
		.enable_ultrabullet(false)
		.enable_casual(true)
		.disable_rated(false)
	));
	
	if log_enabled!(Level::Info){
		info!("starting bot stream");
	}

	let (tx, mut rxa) = bot.stream().await;

	tokio::time::sleep(tokio::time::Duration::from_millis(120000)).await;

	let _ = tx.send("stopped by user".to_string()).await;

	let result = rxa.recv().await;

	if log_enabled!(Level::Info) {
		info!("stop stream result {:?}", result);
	}

	Ok(())
}
