defmodule Shift73kWeb.Pagination do
  def generate_page_list(_, total_pages) when total_pages < 5,
    do: 1..total_pages |> Enum.to_list()

  def generate_page_list(current, total_pages),
    do: first_half(1, current) ++ [current] ++ second_half(current, total_pages)

  defp first_half(first, current) do
    prev = current - 1

    cond do
      first == current -> []
      prev <= first -> [first]
      prev - first > 2 -> [first, -1, prev]
      true -> first..prev |> Enum.to_list()
    end
  end

  defp second_half(current, last) do
    next = current + 1

    cond do
      last == current -> []
      next >= last -> [last]
      last - next > 2 -> [next, -1, last]
      true -> next..last |> Enum.to_list()
    end
  end
end
