// securitytxt-tool entry point. All input is passed with --text for target portability: the CLI never
// opens files or touches the network, matching the library's scope. Successful commands print JSON on
// stdout; `generate` prints the document text. Errors print {"ok":false,"error":{...}}.

///|
fn main {
  run_cli(@env.args())
}

///|
fn run_cli(args : Array[String]) -> Unit {
  let (cmd, rest) = split_command(args)
  let opts = parse_options(rest)
  if opts.unknown.length() > 0 {
    println(
      "{\"ok\":false,\"error\":{\"kind\":\"UnknownOption\",\"option\":\{q(opts.unknown)}}}",
    )
    return
  }
  if opts.help || cmd == "help" {
    print_usage()
    return
  }
  if cmd == "version" {
    println(
      "securitytxt-tool \{@lib.library_version()} (moyunijieshi1/moon-securitytxt)",
    )
    return
  }
  match cmd {
    "parse" => cmd_parse(opts)
    "validate" => cmd_validate(opts)
    "fresh" => cmd_fresh(opts)
    "generate" => cmd_generate(opts)
    "audit" => cmd_audit(opts)
    "stats" => cmd_stats(opts)
    _ =>
      println(
        "{\"ok\":false,\"error\":{\"kind\":\"UnknownCommand\",\"command\":\{q(cmd)}}}",
      )
  }
}

///|
fn print_usage() -> Unit {
  println("securitytxt-tool 0.1.0 — RFC 9116 security.txt toolkit")
  println(
    "usage: securitytxt-tool  --text ",
  )
  println(
    "shared: --limits  --now  --retrieval-uri  --content-type ",
  )
  println(
    "generate: --contact  --expires  --canonical  --encryption ",
  )
  println(
    "generate: --acknowledgments  --policy  --hiring  --preferred-languages ",
  )
  println("generate: --extension  --comment ")
  println(
    "notes: fresh and audit require --now; generate prints the document text; repeatable options accumulate",
  )
}