// Copyright 2026 moonbit-toml contributors
//
// SPDX-License-Identifier: MIT

///|
/// A small end-to-end demo of the library: parse a document, read values,
/// re-encode it, and convert it to JSON.
///
/// Run with: `moon run cmd/example`
fn main raise {
  let src =
    #|  # 服务配置示例
    #|  title = "demo"
    #|
    #|  [server]
    #|  host = "127.0.0.1"
    #|  port = 8080
    #|  tags = ["alpha", "beta"]
    #|
    #|  [[users]]
    #|  name = "Alice"
    #|  admin = true
    #|
    #|  [[users]]
    #|  name = "Bob"
    #|  admin = false
    #|  joined = 2026-10-03T09:30:00Z
  let doc = @toml.parse(src)

  println("== 读取字段 ==")
  println("server.host  = " + @toml.encode_value(read(doc, "server.host")))
  println("server.port  = " + @toml.encode_value(read(doc, "server.port")))
  let users = doc.get_array("users").unwrap()
  println("users.length = " + users.length().to_string())
  println(
    "users[0].name = " +
    users[0].as_table().unwrap().get_string("name").unwrap_or(""),
  )
  let bob = users[1].as_table().unwrap()
  println(
    "users[1].joined = " +
    @toml.encode_datetime(bob.get_datetime("joined").unwrap()),
  )

  println("")
  println("== 重新序列化 ==")
  println(@toml.encode(doc))

  println("== 转 JSON ==")
  println(@toml.Value::Table(doc).to_json_string())
}

///|
/// Dotted-path lookup with a fallback value.
fn read(doc : @toml.Table, path : String) -> @toml.Value {
  doc.get_path(path).unwrap_or(@toml.Value::Str(""))
}