///|
/// CLI demo for MoonPathfinding.
/// Run: moon run cmd/main
fn main {
  let lines = ["S....", ".###.", ".....", ".###.", "....E"]
  let grid = @graph.Grid::from_strings(lines).unwrap()
  let start = @graph.Grid::pos_to_id(grid, 0, 0)
  let goal = @graph.Grid::pos_to_id(grid, 4, 4)

  println("=== MoonPathfinding Demo ===\n")
  println("Grid:")
  println(
    @visualize.ascii_render(
      grid,
      { path: [], cost: 0, nodes_visited: 0 },
      start,
      goal,
    ),
  )
  println("")

  let r_bfs = @algo.bfs(grid, start, goal)
  println(@visualize.result_summary("BFS", r_bfs))
  println(@visualize.ascii_render(grid, r_bfs, start, goal))
  println("")

  let r_dfs = @algo.dfs(grid, start, goal)
  println(@visualize.result_summary("DFS", r_dfs))
  println(@visualize.ascii_render(grid, r_dfs, start, goal))
  println("")

  let r_dij = @algo.dijkstra(grid, start, goal)
  println(@visualize.result_summary("Dijkstra", r_dij))
  println(@visualize.ascii_render(grid, r_dij, start, goal))
  println("")

  let r_astar = @algo.astar(grid, start, goal)
  println(@visualize.result_summary("A*", r_astar))
  println(@visualize.ascii_render(grid, r_astar, start, goal))
  println("")

  let r_gbfs = @algo.greedy_bfs(grid, start, goal)
  println(@visualize.result_summary("Greedy BFS", r_gbfs))
  println(@visualize.ascii_render(grid, r_gbfs, start, goal))
  println("")

  let r_bibfs = @algo.bidirectional_bfs(grid, start, goal)
  println(@visualize.result_summary("Bidirectional BFS", r_bibfs))
  println(@visualize.ascii_render(grid, r_bibfs, start, goal))
  println("")

  let r_bf = @algo.bellman_ford(grid, start, goal)
  println(@visualize.result_summary("Bellman-Ford", r_bf))
  println(@visualize.ascii_render(grid, r_bf, start, goal))
  println("")

  // HTML export
  let html = @visualize.html_render(
    grid, r_astar, start, goal, "MoonPathfinding — A* Demo",
  )
  println("HTML output (" + html.length().to_string() + " chars):")
  println(html[0:200] + "...")
}