///|
fn main {
  println("=== MoonLogTrace Demo ===\n")

  // 1. Basic logging
  println("--- 1. Basic Logging ---")
  let logger = @MoonLogTrace.Logger::new().console().build()
  let l2 = logger.info("App started", [("version", "0.1.0")])
  let l3 = l2.warn("High CPU", [("pct", "92")])
  let _ = l3.error("Crash", [("code", "500")])

  // 2. Level filtering
  println("\n--- 2. Level Filtering ---")
  let fl = @MoonLogTrace.Logger::new()
    .level(@MoonLogTrace.Level::WARN)
    .console()
    .build()
  let _ = fl.info("FILTERED", [])
  let _ = fl.warn("VISIBLE", [])

  // 3. Context
  println("\n--- 3. Context ---")
  let cl = @MoonLogTrace.Logger::new()
    .add_context("env", "demo")
    .console()
    .build()
  let _ = cl.info("With context", [("user", "admin")])

  // 4. Span tracing
  println("\n--- 4. Span Tracing ---")
  let sl = @MoonLogTrace.Logger::new().console().build()
  let (l4, outer) = @MoonLogTrace.Span::enter(sl, "handle_request", [])
  let (l5, inner) = @MoonLogTrace.Span::enter(l4, "db_query", [
    ("table", "users"),
  ])
  let l6 = inner.exit(l5)
  let _ = outer.exit(l6)

  // 5. Config presets
  println("\n--- 5. Config Presets ---")
  let dev = @MoonLogTrace.create_dev_logger()
  let d2 = dev.info("dev mode logging", [])
  println("Dev logger entries: " + d2.logs().length().to_string())

  // 6. Counters
  println("\n--- 6. Counter ---")
  let c = @MoonLogTrace.Counter::new("requests").increment().increment().add(3)
  println("requests: " + c.read().to_string())

  println("\n=== All 6 demos complete ===")
}