defmodule Hexalixir.Grid do
  @grid_size 20

  def new do
    for x <- 0..(@grid_size - 1),
        y <- 0..(@grid_size - 1),
        into: %{} do
      {{x, y}, nil}
    end
  end

  def get_adjacent_coords({x, y}) do
    [
      {x + 1, y}, {x - 1, y},       # right, left
      {x, y + 1}, {x, y - 1},       # up, down
      {x + 1, y - 1}, {x - 1, y + 1} # diagonals
    ]
    |> Enum.filter(fn {x, y} ->
      x >= 0 && x < @grid_size && y >= 0 && y < @grid_size
    end)
  end

  def random_color do
    ["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF"]
    |> Enum.random()
  end

  def check_win(grid) do
    grid
    |> Map.values()
    |> Enum.reject(&is_nil/1)
    |> case do
      [] -> false
      [color | rest] -> Enum.all?(rest, &(&1 == color))
    end
  end
end