use anyhow::{ensure, Result};
use colored::Colorize;
use crate::{config::Config, money::Money, state::State, statistics::Statistics};
pub mod baccarat;
pub mod blackjack;
pub mod cards;
pub mod config;
pub mod craps;
pub mod money;
pub mod roulette;
pub mod slots;
pub mod state;
pub mod statistics;
#[derive(Default)]
pub struct Casino {
pub config: Config,
pub bankroll: Money,
pub stats: Statistics,
}
impl Casino {
fn new(config: Config) -> Self {
Self {
config: config.clone(),
bankroll: config.mister_greens_gift,
..Default::default()
}
}
pub fn from_filesystem() -> Result<Self> {
let config = Config::init_get()?;
let mut casino = Self::new(config.clone());
if config.save_path.try_exists()? {
let save_state = State::load(&config.save_path)?;
casino.bankroll = save_state.bankroll;
} else {
casino.bankroll = config.mister_greens_gift;
}
Statistics::init(&config.stats_path)?;
casino.stats = Statistics::load(&config.stats_path)?;
Ok(casino)
}
pub fn add_bankroll(&mut self, amount: Money) {
self.bankroll += amount;
self.stats.update_bankroll(self.bankroll);
}
pub fn subtract_bankroll(&mut self, amount: Money) -> Result<()> {
ensure!(self.bankroll >= amount, "Cannot subtract to negative value");
self.bankroll -= amount;
self.stats.update_bankroll(self.bankroll);
Ok(())
}
pub fn save(&self) {
let state = State {
bankroll: self.bankroll,
};
state
.save(&self.config.save_path)
.expect("Couldn't save config!");
self.stats
.save(&self.config.stats_path)
.expect("Couldn't save stats!");
}
pub fn check_for_mister_green(&mut self) {
if self.bankroll.is_zero() {
self.add_bankroll(self.config.mister_greens_gift);
println!("{}", "* Unfortunately, you’ve run out of money.".dimmed());
println!(
"{}",
"* However, a portly gentleman in a sharp suit was watching you play your final hand."
.dimmed()
);
println!(
"{}",
"* He says “I like your moxie, kiddo. Take this, and be a little more careful next time. This stuff doesn’t grow on trees.”"
.dimmed());
println!(
"{}",
"* “Oh, and always remember the name: MISTER GREEN!”".dimmed()
);
println!(
"{}",
format!("* The man hands you {}", self.config.mister_greens_gift).dimmed()
);
}
}
}