require "json"
require 'rest_client'
require 'pixways'

class ForwardCsRequest

  attr_accessor :cs_demand, :user_login, :var_id, :parameters, :server_url
  attr_reader :api_res

  def initialize( cs_demand, user_login, var_id, parameters,
                  server_url = "http://#{Server.find_by_name("Pixadmin").host}:#{Server.find_by_name("Pixadmin").api_port}/" )
    @cs_name = Server.find_by_is_self(true).name
    @cs_demand = cs_demand
    @user_login = user_login
    @var_id = var_id
    @parameters = parameters
    @server_url = server_url
    logger.info "** ForwardCs Request initialize : demande = #{@cs_demand} cs = #{@cs_name} user = #{@user_login}"
  end

  def perform
    newjob = CommunicationOutJob.create
    api_res = ""
    url_key = "cs_request"
    endpoint_url = @server_url
    safeurl = URI.encode("#{endpoint_url}#{url_key}".strip)
    begin
      res = RestClient.post( safeurl,
                             {
                               "cs_demand" => @cs_demand, "cs_name" => @cs_name, "user_login" => @user_login, "var_id" => @var_id, "parameters" => @parameters
                             }.to_json, content_type: :json, accept: :json)
    rescue => e
      logger.info"**** rescue #{e.inspect}"
      api_res = "Erreur Rest : #{e.inspect}"
    end
    if api_res.blank?
      if Pixways.valid_json(res.body)
        retour = JSON.parse(res.body)
        api_res = retour["result"]
      else
        api_res = "Erreur Json : #{res.body}"
      end
    end

    newjob.result = api_res
    newjob.done = 100
    newjob.save
  end

end
