/*
* This file is part of laurelin_client
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* Licensed under GPL-3.0-only.
* See LICENSE for licensing information.
*/
use crate::{api::game::{Action, Command}, game_status::{GameStatus, LogEntry, LogSection}};
pub fn action_to_log(
action: &Action,
game_status: &GameStatus,
) -> LogEntry {
let invoker_name = &game_status.players.get(&action.invoker).unwrap().display_name;
let target_name = &game_status.players.get(&action.target).unwrap().display_name;
match &action.command {
Command::InitSupplyPile { card, amount } => {
LogEntry::from_sections(vec![
LogSection::normal("Created supply pile of "),
LogSection::bold(&card.name),
LogSection::normal(" with "),
LogSection::bold(&amount.to_string()),
LogSection::normal(" cards"),
])
}
Command::TakeFromPile { index, for_cost: _ } => {
let card_name = &game_status.supply_piles.get(*index).unwrap().card.name;
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" bought "),
LogSection::bold(card_name),
])
}
Command::PlayCard { index } => {
let card_name = &game_status.players.get(&action.invoker).unwrap().hand.get(*index).unwrap().name;
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" played "),
LogSection::bold(card_name),
])
}
Command::Draw { amount } => {
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" drew "),
LogSection::bold(&amount.to_string()),
LogSection::normal(" cards"),
])
}
Command::Discard { index } => {
let card_name = &game_status.players.get(&action.invoker).unwrap().hand.get(*index).unwrap().name;
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" discarded "),
LogSection::bold(card_name),
])
}
Command::EndTurn {} => {
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" ended their turn"),
])
}
Command::StartTurn {} => {
LogEntry::from_sections(vec![
LogSection::bold(target_name),
LogSection::normal(" started their turn"),
])
}
Command::ChangePlayerState { state } => {
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" changed state to "),
LogSection::bold(&format!("{:?}", state)),
])
}
Command::RollForCurrency { min: _, max: _ } => {
LogEntry::from_sections(vec![
LogSection::bold(invoker_name),
LogSection::normal(" rolled for currency (log borked)"),
])
}
#[allow(unreachable_patterns)]
_ => {
LogEntry {
sections: vec![
LogSection::normal("No log configuration for this command"),
]
}
}
}
}