class RequestToProvider < ActiveRecord::Base

  belongs_to :user
  has_many :provider_response_to_requests, dependent: :destroy
  has_many :selected_providers_for_requests, dependent: :destroy
  has_many :providers, through: :selected_providers_for_requests
  has_many :images, through: :provider_response_to_requests
  has_many :reqphotos, dependent: :destroy
  accepts_nested_attributes_for :reqphotos, allow_destroy: true

  validates :user_id, :presence => true

  def response_count
    provider_response_to_requests.count
  end

  def self.gen_serial(user_id)
    user = User.find_by_id(user_id.to_i)
    title = simplifize(user.title.name)
    server = user.title.server.name
    serial = "#{title}_#{server}_"
    5.times do
      rnd = rand(52)
      serial += (rnd > 25) ? rand(10).to_s : (65+rnd).chr
    end
    serial
  end

  def self.send_request(parameters)
    serial = self.gen_serial(parameters[:user])
    serial = self.gen_serial(parameters[:user]) while !RequestToProvider.find_by_serial(serial).nil?

    request = RequestToProvider.new(text: parameters[:request_text], user_id: parameters[:user], serial: serial)
    user = User.find(parameters[:user])
    subject = "Requete depuis PixPalace de : #{user.login} #{user.title.name}"
    email_list=[]
    if request.save! && !parameters[:providers].nil?
      parameters[:providers].each do |provider_id|
        SelectedProvidersForRequest.create(provider_id: provider_id, request_to_provider_id: request.id)
        provider_contacts = Provider.find(provider_id).provider_contacts.find_by_receive_requests(true)
        provider_contacts.each { |pc| email_list << pc.email }
      end
    end
  end

  def self.q_send_request(parameters)
    if parameters[:serial]
      serial = parameters[:serial]
    else
      serial = self.gen_serial(parameters[:user]) while !RequestToProvider.find_by_serial(serial).nil?
    end
    request = RequestToProvider.new(text: parameters[:request_text], user_id: parameters[:user], serial: serial)
    user = User.find(parameters[:user])
    subject = "Requete depuis PixPalace de : #{user.login} #{user.title.name}"
    email_list=[]
    if request.save! && !parameters[:providers].nil?
      parameters[:providers].each do |p_str_key|
        prov = Provider.find_by_string_key(p_str_key)
        SelectedProvidersForRequest.create(provider_id: prov.id, request_to_provider_id: request.id)
        provider_contacts = prov.provider_contacts.find_by_receive_requests(true)
        provider_contacts.each { |pc| email_list << pc.email }
      end
      mail = UserMailer.send_request_to_provider((email_list rescue nil),"#{parameters[:request_text]}\nFTP dir : #{serial}", subject).deliver_now
    end
  end

end
