class SearchStatsController < ApplicationController

  layout "statistics"

  before_action :load_cached_search_params

  def index
    if @current_params[:search_type]
      search_type = @current_params[:search_type].to_i
      pays = @current_params[:pays].to_i
    else
      search_type = 0
      pays = 0
    end
    @providers_with_authorization = []
    @providers = @current_params[:group_id] ? SearchProviderGroupName.find(@current_params[:group_id]).providers : current_user.providers

    tpg = Authorization.where(:title_provider_group_id => TitleProviderGroup.joins(:provider).where(title_provider_group_name_id: Title.find(current_user.title_id).title_provider_group_name_id, providers:{provider_type_id: 1})).select(:title_provider_group_id).distinct
    tpg.each do |tpg_id|
      @providers_with_authorization << TitleProviderGroup.find(tpg_id.title_provider_group_id).provider_id
    end
    @pw_providers = @providers.where(id: @providers_with_authorization.each{|x| x}, provider_type_id: 1, local: 0).order(:name)
    @local_providers = @providers.where(id: @providers_with_authorization.each{|x| x}, provider_type_id: 1, local: 1).order(:name)
    @photographer_providers = @providers.where(provider_type_id: 2).reorder(:pixtech_id, :pp_string_key, :name)

    if current_user.is_superadmin?
      @titles = Title.order_by_name_select_country(pays)
      @pixtech_titles = Title.order_by_name_select_country(pays,'all')
    else
      @titles = Title.order_by_name_visible_select_country(pays)
      @pixtech_titles = Title.order_by_name_visible_select_country(pays,session[:pixtech]) unless session[:pixtech].blank?
    end
    titles_list = @titles.blank? ? [] : @current_params[:titles].blank? ? @titles.pluck(:id) : @titles.pluck(:id) & @current_params[:titles].keys.collect!{|e| e.to_i}
    @nb_selected_titles = @current_params[:titles].blank? ? '' : titles_list.count > 0 ? "#{titles_list.count} /" : ''
    pixtech_titles_list = @pixtech_titles.blank? ? [] : @current_params[:titles].blank? ? @pixtech_titles.pluck(:id) : @pixtech_titles.pluck(:id) & @current_params[:titles].keys.collect!{|e| e.to_i}
    @nb_selected_pixtech_titles = @current_params[:titles].blank? ? '' : pixtech_titles_list.count > 0 ? "#{pixtech_titles_list.count} /" : ''

    users_list = User.where(title_id: titles_list + pixtech_titles_list).pluck(:id)
    @prov_stat = {}
    @prov_name = []
    @img_field = {}
    @providers.collect{|p| @prov_name[p.id] = p.name}
    search_begin = date_to_db_format(params[:date_begin]).blank? ? '1000-01-01': date_to_db_format(params[:date_begin])
    search_end = date_to_db_format(params[:date_end]).blank? ? '9999-12-31': date_to_db_format(params[:date_end])

    results_query = ''
    case search_type
    when 1
      results_query = 'and provider_for_search_stats.result=0'
    when 2
      results_query = 'and provider_for_search_stats.result>0'
    end

    if @current_params[:providers].blank?
      provs_id = @providers_with_authorization.each{|p| p}
    else
      provs_id = @current_params[:providers].keys.collect!{|e| e.to_i}
    end

    if request.format == 'text/csv'
      @searchstat = SearchStat.joins(:provider_for_search_stats).select('distinct search_stats.*').where("search_stats.user_id in (?) and provider_for_search_stats.provider_id in (?) and search_stats.cs_created >= ? and search_stats.cs_created <= ? #{results_query}",
                                                                                                         users_list, provs_id, search_begin, search_end).order('cs_created DESC')
    else
      @searchstat = SearchStat.joins(:provider_for_search_stats).select('distinct search_stats.*').where("search_stats.user_id in (?) and provider_for_search_stats.provider_id in (?) and search_stats.cs_created >= ? and search_stats.cs_created <= ? #{results_query}",
                                                                                                         users_list, provs_id, search_begin, search_end).order('cs_created DESC').page params[:page]
    end

    @searchstat.each do |s|
      @prov_stat[s.id] = {}
      ProviderForSearchStat.where("search_stat_id = ? and provider_id in (?) #{results_query}",s.id,provs_id).collect{|search| @prov_stat[s.id][search.provider_id] = search.result}
      @img_field[s.id] = {}
      SearchImageField.where(search_stat_id: s.id).collect{|i| @img_field[s.id][i.field_name] = i.field_content}
    end

    respond_to do|format|
      format.html {
      }
      format.js {
      }
      format.csv {
        send_data SearchStat.export_to_csv(@searchstat,@img_field,@prov_stat,@prov_name,session[:provider_word]), filename: "PixPalace - #{t('search_stats')} - #{Time.now.strftime('%Y-%m-%d %H-%M')}.csv", type: 'text/csv; header=present'
      }
    end

  end

  def create
    @sstat =  SearchStat.new(permitted_params)
    respond_to do |f|
      if @sstat.save
        f.xml  { render xml: @sstat, status: :created, location: @sstat }
        f.json { render json: @sstat }
      else
        f.xml  { render xml: @sstat.errors, status: :unprocessable_entity }
        f.json { render json: @sstat.errors }
      end
    end
  end

  def update
  end

  def destroy
  end

  private

  def permitted_params
    params.require(:search_stat).permit!
  end

end
