///|
/// 示例 3:实验管理与插件接口
///
/// 演示参数遍历、批量运行、快照功能和插件注册。
fn main {
  let base = @experiment.new_config(until=50.0, seed=42)
  let configs = @experiment.param_sweep(base~, param_name="load", values=[
    0.5, 1.0, 2.0, 4.0,
  ])
  println("=== 参数遍历实验 ===")
  println("配置数量: \{configs.length()}")
  let results = @experiment.batch_run(configs)
  for i, result in results {
    println(
      "配置 \{i}: load=\{configs[i].params["load"]}, 最终时间=\{result.final_time}",
    )
  }
  let env = @core.new_env(until=30.0)
  let counter : Array[Int] = [0]
  ignore(env.schedule(time=10.0, callback=fn() { counter[0] = counter[0] + 1 }))
  ignore(env.schedule(time=20.0, callback=fn() { counter[0] = counter[0] + 1 }))
  env.run()
  let snap = @experiment.snapshot(env)
  println("=== 单次实验快照 ===")
  println("快照时间: \{snap.time}")
  println("计数器值: \{counter[0]}")
  let mgr = @plugin.new_manager()
  let log_plugin : @plugin.PluginCallbacks = {
    on_step: fn(_env, time) {
      if time == 0.0 {
        println("插件: 仿真开始")
      }
    },
    on_event: fn(_env, _event) { () },
    on_finish: fn(_env) { println("插件: 仿真结束") },
  }
  mgr.register(log_plugin)
  println("已注册插件数: \{mgr.length()}")
}