module Pagy::CalendarExtra::Backend

def pagy_setup_calendar(collection, conf)

Setup and return the calendar objects and the filtered collection
def pagy_setup_calendar(collection, conf)
  units = Calendar::UNITS & conf.keys # get the units in time length desc order
  raise ArgumentError, 'no calendar unit found in pagy_calendar configuration' if units.empty?
  page_param = conf[:pagy][:page_param] || DEFAULT[:page_param]
  units.each do |unit|  # set all the :page_param vars for later deletion
    unit_page_param         = :"#{unit}_#{page_param}"
    conf[unit][:page_param] = unit_page_param
    conf[unit][:page]       = params[unit_page_param]
  end
  calendar = {}
  last_obj = nil
  units.each_with_index do |unit, index|
    params_to_delete    = units[(index + 1), units.size].map { |sub| conf[sub][:page_param] } + [page_param]
    conf[unit][:params] = lambda do |params|  # delete page_param from the sub-units
                            params_to_delete.each { |p| params.delete(p.to_s) } # Hash#except missing from ruby 2.5 baseline
                            params
                          end
    conf[unit][:period] = last_obj&.send(:active_period) || pagy_calendar_period(collection)
    calendar[unit]      = last_obj = Calendar.send(:create, unit, conf[unit])
  end
  [calendar, pagy_calendar_filter(collection, last_obj.from, last_obj.to)]
end