class SubjectSearchService < ApplicationService
  include ElasticsearchAble

  attr_reader :params

  def initialize(params)
    @params = params
  end

  def call
    # 全部实训/我的实训
    type = params[:type] || "all"

    if type == "mine"
      @subjects = User.current.subjects.visible.unhidden
    else
      @subjects = Subject.visible.unhidden
    end

    Subject.search(keyword, search_options)
  end

  private

  def search_options
    model_options = {
      includes: [ user: { user_extension: :school } ]
    }
    model_options.merge!(where: { id: @subjects.pluck(:id) })
    model_options.merge!(order: {sort_type => sort_str})
    model_options.merge!(default_options)
    model_options
  end

  def sort_str
    params[:order] || "desc"
  end

  def sort_type
    params[:sort] || "myshixuns_count"
  end
end