use super::config::MacroeconomyConfig;
use super::resources::EconomicMetrics;
use super::state::MacroeconomyState;
#[derive(Debug, Clone)]
pub struct MacroeconomyPlugin {
config: MacroeconomyConfig,
}
impl MacroeconomyPlugin {
pub fn new() -> Self {
Self {
config: MacroeconomyConfig::default(),
}
}
pub fn with_config(mut self, config: MacroeconomyConfig) -> Self {
self.config = config;
self
}
pub fn with_update_interval(mut self, interval: u64) -> Self {
self.config.update_interval = interval;
self
}
pub fn config(&self) -> &MacroeconomyConfig {
&self.config
}
pub fn initial_state() -> MacroeconomyState {
MacroeconomyState::default()
}
pub fn initial_metrics() -> EconomicMetrics {
EconomicMetrics::default()
}
}
impl Default for MacroeconomyPlugin {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_plugin_creation() {
let plugin = MacroeconomyPlugin::new();
assert_eq!(plugin.config().update_interval, 10);
}
#[test]
fn test_plugin_with_config() {
let mut config = MacroeconomyConfig::default();
config.update_interval = 5;
let plugin = MacroeconomyPlugin::new().with_config(config);
assert_eq!(plugin.config().update_interval, 5);
}
#[test]
fn test_plugin_with_update_interval() {
let plugin = MacroeconomyPlugin::new().with_update_interval(20);
assert_eq!(plugin.config().update_interval, 20);
}
#[test]
fn test_initial_state() {
let state = MacroeconomyPlugin::initial_state();
assert_eq!(state.indicators.last_update, 0);
}
#[test]
fn test_initial_metrics() {
let metrics = MacroeconomyPlugin::initial_metrics();
assert_eq!(metrics.current_tick, 0);
}
}