# frozen_string_literal: true

class ApiSearchMediaQuery
  prepend SimpleCommand

  def initialize(current_user, args = {})
    @current_user = current_user
    @max_per_page = 50
    @args = args
    @search_params = {}
  end

  def call
    build_query!
    output_results! ::Image.instance_eval(args[:sort_by]).search(args[:keywords], @search_params)
  end

  attr_reader :args

  private

  def output_results!(results)
    return {} unless results

    {
      total_entries: results.total_entries,
      total_pages: results.total_pages,
      per_page: results.per_page,
      current_page: results.current_page,
      entries: results
    }
  end

  def build_query!
    @search_params[:per_page] = @args[:per_page] > @max_per_page ? @max_per_page : @args[:per_page]
    @search_params[:page] = args[:page]
    @search_params[:conditions] = ::Image.params_to_conditions(args)
    @search_params[:with] = ::Image.params_to_with(args, 0, @current_user.id)
  end
end
