module JSONAPI::ResourceActions::Pagination

def base_pagination_links(current, size, total)

def base_pagination_links(current, size, total)
  {
    self: pagination_url(current, size),
    first: pagination_url(1, size),
    last: pagination_url(total, size),
  }
end

def build_pagination_links

def build_pagination_links
  page_params = parse_page_param
  current = page_params["number"]&.to_i || 1
  size = calculate_page_size(page_params)
  total = calculate_total_pages(size)
  links = base_pagination_links(current, size, total)
  links[:prev] = pagination_url(current - 1, size) if current > 1
  links[:next] = pagination_url(current + 1, size) if current < total
  links
end

def build_pagination_meta

def build_pagination_meta
  { total: @total_count }
end

def calculate_page_size(page_params)

def calculate_page_size(page_params)
  size = page_params["size"]&.to_i || JSONAPI.configuration.default_page_size
  [size, JSONAPI.configuration.max_page_size].min
end

def calculate_total_pages(size)

def calculate_total_pages(size)
  total = (@total_count.to_f / size).ceil
  total.zero? ? 1 : total
end

def pagination_url(page, size)

def pagination_url(page, size)
  query = request.query_parameters.dup
  query["page"] = { "number" => page, "size" => size }
  "#{request.path}?#{JSONAPI::ParamHelpers.build_query_string(query)}"
end