///| MoonBit + Raylib Android project scaffolding tool

///|

///|
/// Usage: moon run . --  [--orientation landscape|portrait] [--module-owner ]
async fn main {
  let args = @env.args()
  // Parse arguments (skip program name)
  let mut project_name = ""
  let mut orientation = "landscape"
  let mut module_owner = "username"
  let mut i = 1
  while i < args.length() {
    if args[i] == "--orientation" {
      i += 1
      if i < args.length() {
        orientation = args[i]
      } else {
        println("Error: --orientation requires a value (landscape or portrait)")
        return
      }
    } else if args[i] == "--module-owner" {
      i += 1
      if i < args.length() {
        module_owner = args[i]
      } else {
        println("Error: --module-owner requires a value")
        return
      }
    } else if args[i] == "--help" || args[i] == "-h" {
      print_usage()
      return
    } else if args[i].length() > 0 && args[i].to_array()[0] == '-' {
      println("Error: Unknown option '\{args[i]}'")
      print_usage()
      return
    } else if project_name == "" {
      project_name = args[i]
    } else {
      println("Error: Unexpected argument '\{args[i]}'")
      print_usage()
      return
    }
    i += 1
  }

  if project_name == "" {
    println("Error: Project name is required.")
    println("")
    print_usage()
    return
  }

  if not(is_valid_name(project_name)) {
    println(
      "Error: Project name must be PascalCase (start with uppercase, alphanumeric only).",
    )
    println("  Example: MyBouncingBall, RaylibGame, SpaceInvaders2026")
    return
  }

  if orientation != "landscape" && orientation != "portrait" {
    println("Error: Orientation must be 'landscape' or 'portrait'.")
    return
  }

  let config = derive_names(project_name, orientation, module_owner)
  try {
    generate(config)
  } catch {
    Failure::Failure(msg) => println("Error: \{msg}")
    _ => println("Error: unexpected error")
  }
}

///|
fn print_usage() -> Unit {
  println("Usage: moon run . --  [options]")
  println("")
  println("Create a new MoonBit + Raylib Android game project.")
  println("")
  println("Arguments:")
  println("                PascalCase name (e.g. MyBouncingBall)")
  println("")
  println("Options:")
  println(
    "  --orientation       Screen orientation: landscape (default) or portrait",
  )
  println(
    "  --module-owner      MoonBit module owner (default: username)",
  )
  println("  -h, --help                 Show this help message")
}