class Weapps::ShixunSearchService < ApplicationService

  attr_reader :params, :laboratory

  def initialize(params, laboratory)
    @params = params
    @laboratory = laboratory
  end

  def call
    shixuns = laboratory.shixuns.published.no_jupyter

    # 超级管理员用户显示所有未隐藏的实训、非管理员显示所有已发布的实训(对本单位公开且未隐藏未关闭)
    if User.current.admin? || User.current.business? || !User.current.school_id
      shixuns = shixuns.where(hidden: 0)
    else
      shixun_ids = ShixunSchool.where(school_id: User.current.school_id).pluck(:shixun_id)
      shixun_ids = shixun_ids.reject(&:blank?).length == 0 ? -1 : shixun_ids.join(",")

      shixuns = shixuns.where("use_scope = 0 or id in (#{shixun_ids})").unhidden.publiced.or(shixuns.where(id: User.current.shixuns))
    end

    ## 筛选 难度
    if params[:diff].present? && params[:diff].to_i != 0
      shixuns = shixuns.where(trainee: params[:diff])
    end

    unless params[:keyword].blank?
      keyword = params[:keyword].strip
      shixuns = shixuns.joins(:user).
        where("concat(lastname, firstname) like :keyword or shixuns.name like :keyword",
              keyword: "%#{keyword}%", name: "%#{keyword.split(" ").join("%")}%").distinct.
        order("#{sort_str} #{order_str}")
    end

    shixuns
  end

  private

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

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