# Simple Box Drawing Example
# Demonstrates Raxol.Core.Box module capabilities
#
# Run with: mix run examples/core/02_box_drawing/simple_boxes.exs

alias Raxol.Core.{Buffer, Box}

# Create a buffer
buffer = Buffer.create_blank_buffer(70, 25)

# Draw title bar with double-line box
buffer =
  buffer
  |> Box.draw_box(1, 1, 68, 3, :double)
  |> Buffer.write_at(3, 2, "Raxol.Core.Box - Box Drawing Examples", %{})

# Draw single-line box
buffer =
  buffer
  |> Box.draw_box(3, 5, 20, 5, :single)
  |> Buffer.write_at(5, 6, "Single Line", %{})

# Draw double-line box
buffer =
  buffer
  |> Box.draw_box(26, 5, 20, 5, :double)
  |> Buffer.write_at(28, 6, "Double Line", %{})

# Draw rounded box
buffer =
  buffer
  |> Box.draw_box(49, 5, 18, 5, :rounded)
  |> Buffer.write_at(51, 6, "Rounded", %{})

# Draw heavy box with filled interior
buffer =
  buffer
  |> Box.draw_box(3, 11, 20, 7, :heavy)
  |> Box.fill_area(4, 12, 18, 5, ".", %{})
  |> Buffer.write_at(7, 14, "Heavy + Fill", %{})

# Draw dashed box
buffer =
  buffer
  |> Box.draw_box(26, 11, 20, 7, :dashed)
  |> Buffer.write_at(30, 14, "Dashed", %{})

# Draw a nested box layout
buffer =
  buffer
  |> Box.draw_box(49, 11, 18, 7, :double)
  |> Box.draw_box(50, 12, 16, 5, :single)
  |> Buffer.write_at(53, 14, "Nested", %{})

# Draw horizontal and vertical lines
buffer =
  buffer
  |> Box.draw_horizontal_line(1, 19, 68, "=")
  |> Box.draw_vertical_line(23, 5, 14, "|")
  |> Box.draw_vertical_line(47, 5, 14, "|")

# Add footer
buffer =
  buffer
  |> Buffer.write_at(
    2,
    21,
    "Horizontal lines (=) and vertical lines (|) demonstrated",
    %{}
  )

# Render to terminal
IO.puts("\n" <> Buffer.to_string(buffer) <> "\n")

IO.puts("Performance: All operations completed in < 1ms")
IO.puts("See bench/core/box_benchmark.exs for detailed metrics")
