# frozen_string_literal: true

# public API controller for resources of type Reservation
class OpenAPI::V1::ReservationsController < OpenAPI::V1::BaseController
  extend OpenAPI::ApiDoc
  include Rails::Pagination
  expose_doc

  def index
    @reservations = Reservation.order(created_at: :desc)
                               .includes(statistic_profile: :user)
                               .references(:statistic_profiles)

    @reservations = @reservations.where(statistic_profiles: { user_id: params[:user_id] }) if params[:user_id].present?
    @reservations = @reservations.where(reservable_type: format_type(params[:reservable_type])) if params[:reservable_type].present?
    @reservations = @reservations.where(reservable_id: params[:reservable_id]) if params[:reservable_id].present?

    return unless params[:page].present?

    @reservations = @reservations.page(params[:page]).per(per_page)
    paginate @reservations, per_page: per_page
  end

  private

  def format_type(type)
    type.singularize.classify
  end

  def per_page
    params[:per_page] || 20
  end
end