use reputation_core::{Calculator, CalculatorPreset, BonusConfig};
use reputation_types::AgentDataBuilder;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Calculator Builder Pattern Examples ===\n");
println!("1. Default Calculator:");
let default_calc = Calculator::builder().build()?;
println!(" Confidence K: {}", default_calc.confidence_k());
println!(" Prior Base: {}", default_calc.prior_base());
println!(" Prior Max: {}\n", default_calc.prior_max());
println!("2. Custom Calculator:");
let custom_calc = Calculator::builder()
.confidence_k(20.0) .prior_base(60.0) .prior_max(90.0) .build()?;
println!(" Confidence K: {}", custom_calc.confidence_k());
println!(" Prior Base: {}", custom_calc.prior_base());
println!(" Prior Max: {}\n", custom_calc.prior_max());
println!("3. Preset Calculators:");
let testing_calc = Calculator::builder()
.preset(CalculatorPreset::Testing)
.build()?;
println!(" Testing Preset - Confidence K: {} (fast growth)",
testing_calc.confidence_k());
let conservative_calc = Calculator::builder()
.preset(CalculatorPreset::Conservative)
.build()?;
println!(" Conservative Preset - Confidence K: {} (slow growth)",
conservative_calc.confidence_k());
let aggressive_calc = Calculator::builder()
.preset(CalculatorPreset::Aggressive)
.build()?;
println!(" Aggressive Preset - Confidence K: {} (medium growth)\n",
aggressive_calc.confidence_k());
println!("4. Preset with Override:");
let mixed_calc = Calculator::builder()
.preset(CalculatorPreset::Conservative)
.prior_max(95.0) .build()?;
println!(" Confidence K: {} (from preset)", mixed_calc.confidence_k());
println!(" Prior Base: {} (from preset)", mixed_calc.prior_base());
println!(" Prior Max: {} (overridden)\n", mixed_calc.prior_max());
println!("5. Custom Bonus Configuration:");
let bonuses = BonusConfig {
mcp_bonus_per_level: 7.0,
identity_bonus: 10.0,
security_audit_bonus: 12.0,
open_source_bonus: 5.0,
age_bonus: 8.0,
};
let _bonus_calc = Calculator::builder()
.prior_bonuses(bonuses)
.build()?;
println!(" Calculator configured with custom bonuses");
println!(" (Note: Current implementation uses default bonuses)\n");
println!("6. Comparing Calculations:");
let agent = AgentDataBuilder::new("did:example:test")
.with_reviews(50, 4.2)
.total_interactions(100)
.mcp_level(2)
.identity_verified(true)
.build()?;
let default_score = default_calc.calculate(&agent)?;
let conservative_score = conservative_calc.calculate(&agent)?;
let aggressive_score = aggressive_calc.calculate(&agent)?;
println!(" Same agent scored with different calculators:");
println!(" - Default: {:.2} (confidence: {:.3})",
default_score.score, default_score.confidence);
println!(" - Conservative: {:.2} (confidence: {:.3})",
conservative_score.score, conservative_score.confidence);
println!(" - Aggressive: {:.2} (confidence: {:.3})",
aggressive_score.score, aggressive_score.confidence);
println!("\n Note: Conservative has lower confidence due to higher K value");
println!("\n7. Builder Cloning:");
let base_builder = Calculator::builder()
.confidence_k(25.0)
.prior_base(55.0);
let calc1 = base_builder.clone()
.prior_max(85.0)
.build()?;
let calc2 = base_builder
.prior_max(90.0)
.build()?;
println!(" Two calculators from cloned builder:");
println!(" - Calc1: prior_max = {}", calc1.prior_max());
println!(" - Calc2: prior_max = {}", calc2.prior_max());
Ok(())
}