# Este cocdigo fica em app/controllers/members_controller.rb

class MembersController < ApplicationController
  before_action :default_filters

  # Estou usando a gem has_scope
  has_scope :page, :default => 1

  # GET /members
  def index
    authorize :sponsor # usando a gem pundit

    respond_with collection
  end

  # aqui estão minhas actions, o que não vem ao caso mostrar agora
  
  private

  # Definindo os valores padrão para meus filtros
  def default_filters
    params[:filter] ||= {}
    params[:filter][:document_status] = params[:filter].fetch(
      :document_status,
      (current_user.employee? ? DocumentStatusFilterValues::UNVERIFIED : DocumentStatusFilterValues::BOTH)
    )
    params[:filter][:card_photo] = params[:filter].fetch(
      :card_photo,
      BooleanFilterValues::BOTH
    )
    params[:filter][:proof_residence_photo] = params[:filter].fetch(
      :proof_residence_photo,
      BooleanFilterValues::BOTH
    )
    params[:filter][:identification_photo] = params[:filter].fetch(
      :identification_photo,
      BooleanFilterValues::BOTH
    )
  end

  # Only allow a trusted parameter "white list" through.
  def filter_params
    return {} if params[:filter].blank?

    params
      .require( :filter )
      .permit( policy(:member).permitted_filter_attributes )
  end

  def resource_class
    @resource_class ||= Sponsor
  end
  helper_method :resource_class

  def resource_name
    @resource_name ||= :sponsor
  end
  helper_method :resource_name

  def resource
    @member ||= Sponsor.find(params[:id])
  end
  helper_method :resource

  def filter
    @filter ||= MemberFilter.new filter_params
  end
  helper_method :filter

  def collection
    @members ||= apply_scopes( filter.collection )
  end
  helper_method :collection
end