///|
/// MoonBit Struct Generator — JSON Schema to MoonBit struct definitions
///
/// Accepts a JSON Schema via the `--schema` flag and generates MoonBit
/// struct definitions from it.
///
/// Usage:
///   moon run cmd/gen-struct -- --schema ''
///   moon run cmd/gen-struct -- --help
///
/// Examples:
///   moon run cmd/gen-struct -- --schema '{"type":"object","properties":{"name":{"type":"string"}}}'
///   moon run cmd/gen-struct -- --schema '{"$defs":{"User":{"type":"object","properties":{"name":{"type":"string"}}}},"$ref":"#/$defs/User"}'
fn main {
  let args = @env.args()
  if args.length() < 2 || args[1] == "--help" {
    println("Usage: moon run cmd/gen-struct -- --schema ''")
    println("")
    println("Generate MoonBit struct definitions from a JSON Schema document.")
    println("Nested JSON Schema objects are emitted as standalone structs.")
    println("")
    println("Examples:")
    println(
      "  moon run cmd/gen-struct -- --schema '{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"}}}'",
    )
    println("  moon run cmd/gen-struct -- --help")
    return
  }

  if args.length() < 3 || args[1] != "--schema" {
    println("Error: use --schema flag to provide a JSON Schema")
    println("  moon run cmd/gen-struct -- --schema ''")
    return
  }

  let raw = args[2]
  let schema_json = @json.parse(raw) catch {
    _ => {
      println("Error: invalid JSON Schema")
      return
    }
  }

  let schema = @moon_zod.json_schema_to_schema(schema_json)

  println("── Generated MoonBit struct definitions ──")
  println(@moon_zod.schema_to_moonbit_struct_full(schema))
  println("")
  println("── End ──")
}