require 'imperituroard/projects/iot/internal_functions'


class Crm_2

  attr_accessor :crm_callback_url, :crm_login, :crm_password, :internal_func, :telegram_connector, :log_level

  def initialize(crm_callback_url, crm_login, crm_password, telegram_api_url, telegram_chat_id, log_level)
    @crm_callback_url = crm_callback_url
    @crm_login = crm_login
    @log_level = log_level
    @crm_password = crm_password
    @internal_func = InternalFunc.new
    @telegram_connector = Telegram_2.new(telegram_api_url, telegram_chat_id)
  end

  def crm_status_2(crm_payload, slice_num)

    input_params = {:crm_payload => crm_payload}
    output_params = {}
    request_message = {}

    begin

      internal_func.printer_texter({:input => 'Start process', :procedure => "Crm_2.crm_status_2"}, log_level)


      thr_crm_status_2 = Thread.new do

        internal_func.printer_texter({:input => 'Thread start', :procedure => 'Crm_2.crm_status_2'}, log_level)

        partnnn = crm_payload[:results].each_slice(slice_num).to_a

        partnnn.each { |one_part_reports|

          crm_payload2 = {:results => one_part_reports }


          uri = URI(crm_callback_url)
          #8 - client id

          internal_func.printer_texter({:input => 'before net', :procedure => 'Crm_2.crm_status_2'}, log_level)

          https = Net::HTTP.new(uri.host, uri.port)
          https.use_ssl = true
          https.verify_mode = OpenSSL::SSL::VERIFY_NONE
          req = Net::HTTP::Post.new(uri.path, initheader = {:"Content-Type" => 'application/json'})

          req.basic_auth crm_login, crm_password

          req["Content-Type"] = "application/json"
          req["Accept"] = "application/json"

          internal_func.printer_texter({:input => {:crm_payload2 => crm_payload2}, :procedure => "Crm_2.crm_status_2"}, log_level)


          req.body = crm_payload2.to_json

          internal_func.printer_texter({:input => "Before send request to crm", :procedure => "Crm_2.crm_status_2"}, log_level)

          begin

            res = https.request(req)
            internal_func.printer_texter({:input => "After send request to crm Ok", :procedure => "Crm_2.crm_status_2"}, log_level)
            internal_func.printer_texter({:input => {:res_code => res.code, :res_body => res.body.to_s}, :procedure => "Crm_2.crm_status_2"}, log_level)

          rescue

            res = 'dabrabyt error'
            internal_func.printer_texter({:input => "After send request to crm error", :procedure => "Crm_2.crm_status_2"}, log_level)
            internal_func.printer_texter({:input => {:res_code => "500", :res_body => res}, :procedure => "Crm_2.crm_status_2"}, log_level)

          end

        }

        output_params = {:code => 200,
                         :result => "Crm_2.crm_status_2: Request processed",
                         :body => {:request_message => crm_payload,
                                   :res_code => "200",
                                   :res_body => ""}}
        #p res.body
      end
      thr_crm_status_2.join

    rescue
      output_params = {:code => 500, :result => "Crm_2.crm_status_2: Something wrong", :body => {:request_message => request_message}}
      telegram_connector.telegram_message(output_params)
    end
    internal_func.printer_texter({:input => input_params, :output => output_params, :procedure => "Crm_2.crm_status_2"}, log_level)
    output_params

  end


end