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

///|
/// Interactive scenario demonstrating Differentially Private Tabular SQL Engine.
pub fn run_sql_demo() -> Unit {
  println("==================================================")
  println("  2. Private Tabular Query Engine Scenario       ")
  println("==================================================")

  let bound = match @core.DomainBound::new(0.0, 150000.0) {
    Ok(b) => b
    Err(_) => return ()
  }
  let salaries = [50000.0, 65000.0, 80000.0, 120000.0, 95000.0, 72000.0]
  let col = @query.Column::new("salary", salaries, bound)

  let tbl = @query.Table::new("employee_salaries")
  let _ = tbl.add_column(col)

  let init_b = match @core.PrivacyBudget::make(5.0, 0.0001) {
    Ok(b) => b
    Err(_) => return ()
  }
  let acc = @ledger.PrivacyAccount::new(
    "analyst_01", "Finance Analyst", init_b, 50,
  )
  let p_guard = @query.PrivacyGuard::new(acc, 9999UL)

  let req_b = match @core.PrivacyBudget::make(0.5, 0.00001) {
    Ok(b) => b
    Err(_) => return ()
  }
  let res_avg = match
    p_guard.execute_query(
      "q_avg_salary",
      tbl,
      @query.QueryType::select_avg("salary"),
      req_b,
    ) {
    Ok(v) => v
    Err(_) => []
  }

  if res_avg.length() > 0 {
    println("DP Salary Average Result: " + @core.format_decimal(res_avg[0], 2))
  }
  println("Remaining Budget: " + p_guard.remaining_budget().to_string())
  println("")
}