// Copyright 2026 ppyq882
// Licensed under the Apache License, Version 2.0

///|
/// Interactive scenario demonstrating Privacy Budget Ledger, Sub-Ledgers, and Odometers.
pub fn run_budget_demo() -> Unit {
  println("==================================================")
  println("  1. Privacy Budget Ledger & Odometer Scenario    ")
  println("==================================================")

  let init_b = match @core.PrivacyBudget::make(10.0, 0.001) {
    Ok(b) => b
    Err(_) => @core.PrivacyBudget::zero()
  }
  let acc = @ledger.PrivacyAccount::new(
    "acc_analytics", "Data Science Team", init_b, 100,
  )

  println("Initial Account Budget: " + acc.initial_budget().to_string())

  let odo = @ledger.PrivacyOdometer::new("analytics_odometer", 5.0)

  let q_cost = match @core.PrivacyBudget::make(1.5, 0.0001) {
    Ok(b) => b
    Err(_) => @core.PrivacyBudget::zero()
  }
  let _ = acc.consume(q_cost)
  let warned = odo.record(q_cost)

  println("Executed Query 1 (Cost: " + q_cost.to_string() + ")")
  println("Remaining Account Budget: " + acc.remaining_budget().to_string())
  println(
    "Odometer Total Measured: " +
    odo.measured().to_string() +
    ", Warning Triggered: " +
    warned.to_string(),
  )
  println("")
}