class ApiCsController < ApplicationController
  skip_before_action :login_required

  def bnf_mail
    provider= Provider.find_by(string_key: 'Bnf')
    mail_to = provider.provider_contacts.find_by_receive_requests(true).email
    user = User.find_by_login(params[:login])
    img_thumbloc = Image.where(provider_id: provider.id, original_filename: params[:parameters][:bnf_files]).pluck(:thumb_location).first
    mail = UserMailer.send_bnf_form(mail_to, params[:parameters], user, img_thumbloc).deliver_now
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def showcase_form_mail
    if params[:parameters].blank?
      session_locale = I18n.locale
    else
      session_locale = params[:parameters][:session_locale].blank? ? 'fr' :  (I18n.available_locales.to_s.include?(params[:parameters][:session_locale])  ? params[:parameters][:session_locale] : 'fr')
    end
    imgs = {}
    im_prov = {}
    provider = Provider.find_by(string_key: "#{params[:parameters]['prov_sk']}")
    mail_to = provider.nil? ? '' : (provider.provider_contacts.find_by(receive_demand: true).email rescue '')
    UserMailer.showcase_form(params[:parameters]).deliver_now
    if params[:parameters]['form_type']=='demand'
      # user confirmation mail
      provider = Provider.find_by(string_key: "#{params[:parameters]['prov_sk']}")
      user_guest=User.new(first_name:params[:parameters]['first_name'], last_name:params[:parameters]['last_name'],email:params[:parameters]['email'])
      img = Image.find_by(file_name: params[:parameters]['picname'])
      img_original_filename = img.nil? ? params[:parameters]['picname'] : img.original_filename
      img_thumb_location = img.nil? ? '' : img.thumb_location
      imgs[img_original_filename] = img_thumb_location
      im_prov[provider.id] = []
      im_prov[provider.id] << img_original_filename
      UserMailer.dw_user(im_prov[provider.id], imgs, params[:parameters]['session_pixtech'], provider.name, mail_to, user_guest, '',session_locale).deliver_now
      user_guest.destroy
      # statistics
      unless img.nil?
        user_vitrine = User.find_by(login: params[:parameters]['user_vitrine'])
        Statistic.create_stat(user_vitrine.id, img.id, 3) unless user_vitrine.nil?
      end
    elsif params[:parameters]['form_type']=='register'
      UserMailer.showcase_form_user(params[:parameters]).deliver_now
    end
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def feedback_mail
    tempfile_path = params[:file_path].blank? ?  '' : params[:file_path]
    #ToDo manage to use recipient 'to' language instead
    # if params[:parameters].blank?
    #   session_locale = I18n.locale
    # else
    #   session_locale = params[:parameters][:session_locale].blank? ? 'fr' :  (I18n.available_locales.to_s.include?(params[:parameters][:session_locale])  ? params[:parameters][:session_locale] : 'fr')
    # end
    session_locale = 'fr'
    AdminMailer.feedback(params[:cs_name], params[:text], User.find_by_login(params[:login]), tempfile_path, params[:original_file_name], params[:file_url], params[:pixtech_name],session_locale).deliver_now
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def user_demand
    prov = []
    imgs = {}
    im_prov = {}
    im_creator = {}
    pixtech_ref = {}
    if params[:parameters].blank?
      operation = params[:operation]
      session_locale = I18n.locale
    else
      operation = params[:parameters][:type_op]
      session_locale = params[:parameters][:session_locale].blank? ? 'fr' :  (I18n.available_locales.to_s.include?(params[:parameters][:session_locale])  ? params[:parameters][:session_locale] : 'fr')
    end
    user = User.find_by_login(params[:login])
    Array(params[:ms_id]).each do |ms_id|
      img = Image.find_by_ms_image_id(ms_id.to_i)
      unless img.nil?
        Statistic.create_stat(user.id, img.id, 3)
        #img = Image.where(id: i).select(:original_filename, :provider_id, :thumb_location, :creator).first
        im = img.original_filename
        p = img.provider_id
        prov << p
        imgs[im] = img.thumb_location
        if img.provider.is_pixtech_stock?
          im_creator[im] = img.creator
          pixtech_ref[im] = Provider.where(name: img_creator, pp_string_key: img.provider.string_key).description rescue ''
        else
          im_creator[im] = ''
          pixtech_ref[im] = ''
        end
        im_prov[p] = [] unless im_prov.key? p
        im_prov[p] << im
      end
    end
    prov.compact!
    prov.uniq!
    prov.each do |p|
      prov_img = Provider.find(p)
      prov_contact = []
      ProviderContact.where(provider_id: p, receive_demand: true).collect{ |pc| prov_contact << pc.email }
      unless prov_contact.blank?
        pixtech_name = prov_img.is_pixtech? ? prov_img.get_pixtech_name : ''
        UserMailer.dw_provider(im_prov[p], imgs, pixtech_name, im_creator, pixtech_ref, prov_img.name, prov_contact, user, operation).deliver_now
      end
      UserMailer.dw_user(im_prov[p], imgs, pixtech_name, prov_img.name, prov_contact, user, operation, session_locale).deliver_now
      sleep 3
    end
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def stat_lr
    stats = []
    imgs_id = Image.where(ms_image_id: (params[:ms_id])).pluck(:id)
    user_id = User.find_by_login(params[:login]).id
    imgs_id.each do |img_id|
      stats << {user_id: user_id, operation_label_id: params[:operation_id].to_i, image_id: img_id}
    end
    Statistic.create(stats)
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def stat_hr
    img_id = Image.find_by_ms_image_id(params[:ms_id].to_i).id
    user_id = User.find_by_login(params[:login]).id
    stat = Statistic.create(:operation_label_id => params[:operation_id].to_i, :user_id => user_id, :image_id => img_id)
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def stat
    img_id = Image.find_by_ms_image_id(params[:ms_id].to_i).id
    user_id = User.find_by_login(params[:login]).id
    stat = Statistic.create(operation_label_id: params[:operation_id].to_i, user_id: user_id, image_id: img_id)
    stat.update(created_at: params[:operation_date])
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def cs_request
    r_text = params[:text]
    user = User.find_by_login(params[:login])
    serial = params[:serial]
    provs_sk = params[:stringkey]
    tempfile_path = params[:file_path].blank? ?  '' : params[:file_path]
    original_file_name = params[:original_file_name]
    #folder_path = Rails.root.join('public','uploads',serial)
    #local_file_path = remote_file_path.blank? ?  '' : "#{folder_path}/#{File.basename(remote_file_path)}"
    file_url = params[:file_url]

    request = RequestToProvider.new(
        text: r_text,
        user_id: user.id,
        serial: serial
    )

    email_list = []
    provs = []
    Array(provs_sk).each do |p|
      prov = Provider.find_by(string_key: p)
      unless prov.nil?
        provs << prov.id
        prov.provider_contacts.where(receive_requests: true).collect{|pc| email_list << pc.email}
        SelectedProvidersForRequest.create(provider_id: prov.id, request_to_provider_id: request.id) if request.save
      end
    end

    #system("mkdir -p #{folder_path};scp #{user.title.server.name}:#{remote_file_path} #{local_file_path}") unless remote_file_path.blank?

    email_list.each_slice(25) do |email_slice|
      UserMailer.send_request_to_provider(email_slice.join(','), r_text, "FTP dir : #{serial}", user.email, user.full_name, user.title.name, tempfile_path, original_file_name, file_url).deliver_now
      sleep 3 unless email_slice.include?(email_list.last)
    end

    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def sst_create
    user_id = User.find_by_login(params[:login]).id rescue nil
    sst = SearchStat.create(:keyword => params[:parameters][:keyword], :since => params[:parameters][:since],
                            :tri => params[:parameters][:tri], :date_pp_from => params[:parameters][:date_pp_from],
                            :date_pp_to => params[:parameters][:date_pp_to], :date_photo_from => params[:parameters][:date_photo_from],
                            :date_photo_to => params[:parameters][:date_photo_to], :format => params[:parameters][:format],
                            :result => params[:parameters][:result], :user_id => user_id,
                            :serv_name => params[:cs_name], :cs_stat_id => params[:parameters][:id], :cs_created => params[:parameters][:created],
                            :translation => params[:parameters][:translation], :special_filter => params[:parameters][:special_filter])
    respond_to do |format|
      format.json { render json: {} }
    end
  end

  def pfs_create
    search_st_id = SearchStat.where(serv_name: params[:cs_name], cs_stat_id: params[:search_stat_id].to_i).first.id rescue nil
    unless search_st_id.blank?
      prov_id = Provider.find_by_string_key(params[:string_key]).id
      pfs = ProviderForSearchStat.create(:search_stat_id => search_st_id,
                                         :provider_id => prov_id,
                                         :result => params[:result])
      respond_to do |f|
        f.json { render json: {} }
      end
    end
  end

  def sif_create
    search_st_id = SearchStat.where(serv_name: params[:cs_name], cs_stat_id: params[:search_stat_id].to_i).first.id rescue nil
    unless search_st_id.blank?
      sif = SearchImageField.create(:search_stat_id => search_st_id,
                                    :field_name => params[:field_name],
                                    :field_content => params[:field_content])
      respond_to do |f|
        f.json { render json: {} }
      end
    end
  end

end

