use zzstat::source::ConstantSource;
use zzstat::transform::MultiplicativeTransform;
use zzstat::*;
fn main() -> Result<(), StatError> {
let mut resolver = StatResolver::new();
let hp_id = StatId::from_str("HP");
println!("Registering sources for HP:");
resolver.register_source(hp_id.clone(), Box::new(ConstantSource(100.0)));
println!(" - Base HP: 100");
resolver.register_source(hp_id.clone(), Box::new(ConstantSource(50.0)));
println!(" - Item bonus: +50");
println!("\nRegistering transform:");
resolver.register_transform(hp_id.clone(), Box::new(MultiplicativeTransform::new(1.2)));
println!(" - 20% bonus multiplier");
let context = StatContext::new();
println!("\nResolving HP...");
let resolved = resolver.resolve(&hp_id, &context)?;
println!("\n=== Resolved Stat ===");
println!("Stat ID: {}", resolved.stat_id);
println!("Final Value: {:.2}", resolved.value);
println!("\nSource Breakdown:");
for (desc, value) in &resolved.sources {
println!(" {}: {:.2}", desc, value);
}
println!("\nTransform Breakdown:");
for (desc, value) in &resolved.transforms {
println!(" {}: {:.2}", desc, value);
}
println!("\nCalculation: (100 + 50) * 1.2 = {:.2}", resolved.value);
Ok(())
}