#![forbid(unsafe_code)]
#![deny(clippy::all)]
#![deny(clippy::pedantic)]
#![allow(clippy::missing_panics_doc)]
pub mod controls;
pub mod game_logic;
pub mod graphics;
use crate::game_logic::logger::log_configuration::{
DEFAULT_LOG_CONFIG_PATH, LogLevel, init_logger, update_log_level,
};
use crate::game_logic::playing_thread_manager::Game;
use clap::Parser;
use game_logic::game_options::GameOptions;
use tracing::{debug, info};
pub fn start_snake() {
let mut args = GameOptions::parse();
let cli_random = args.random;
if let Some(preset) = args.load {
args = GameOptions::load_from_toml_preset(preset).unwrap_or_else(|_| {
panic!("Fail to load Snake configuration file for preset {preset}")
});
}
if cli_random {
let previous_log_level = args.log_level;
let previous_load = args.load;
args = GameOptions::random();
args.log_level = previous_log_level;
args.load = previous_load;
}
let (_guard, log_config) = init_logger(Some(DEFAULT_LOG_CONFIG_PATH));
if args.log_level != LogLevel::Off {
update_log_level(args.log_level);
}
info!("Snake game arguments parsed and configuration is successful!");
debug!(log_config = ?log_config);
let terminal = ratatui::init();
Game::menu(args, terminal);
ratatui::restore();
}