require 'savon'
require 'json'
require 'imperituroard/platforms/cps/request_formatter'

class Qps_2

  attr_accessor :formatter_connector, :cps_connector_client

  def initialize(cps_wsdl, cps_endpoint, cps_namespace)
    @formatter_connector = CpsFormatter_2.new
    @cps_connector_client = Savon.client do
      ssl_verify_mode :none
      wsdl cps_wsdl
      endpoint cps_endpoint
      namespace cps_namespace
    end
  end

  #final procedure
  def get_subscriber_msisdn(msisdn)
    response = cps_connector_client.call(:get_subscriber) do
      message(networkId: msisdn)
    end
    answer = JSON.parse(response.to_json)
  end

  def recreate_subscriber(info_from_get_subs)
    mess = formatter_connector.create_subs_for_recreate(info_from_get_subs)
    #tmp = {:subscriber=>{:credential=>[{:networkId=>"375001029830"}, {:networkId=>"Ethernet1/0/9:1933.0 Min_Ljubimova_37_2/0/0/1/0/9", :type=>"User-Name"}], :notification=>[{"destination"=>"etrofimenko@bntu.by", "enabled"=>true, "transport"=>"EMAIL"}, {"destination"=>nil, "enabled"=>false, "transport"=>"SMS"}], :service=>[{"code"=>"FR0000", "enabled"=>true}, {"code"=>"FR10312", "enabled"=>true}, {"code"=>"FR11885", "enabled"=>true}, {"code"=>"FR11873", "enabled"=>true}]}}
    response = cps_connector_client.call(:create_subscriber) do
      message(mess)
    end
    response.to_hash
  end

  #final procedure
  def delete_subscriber(user)
    mess = {:networkId => user, :hardDelete => "true"}
    response = cps_connector_client.call(:delete_subscriber) do
      message(mess)
    end
    access_interface1 = response.to_hash #[:mts_wifi_portal_get_access_int_response][:accessinterface]
  end

  def add_avp_acl(username, acl)
      message1 = {
          :audit => {:id => "SOAPGW", :comment => "takih ne berut v kosmonavty"},
          :networkId => username,
          :newAvp => [
              {:code =>"IN-ACL", :value => acl}
          ]
      }
      response = cps_connector_client.call(:change_subscriber_avps) do
        message(message1)
      end
      response.to_hash
  end

  def delete_avp_acl(username)
    mess = {
        :audit => {:id => 'SOAPGW', :comment => 'some procedure'},
        :networkId => username,
        :deletedAvp => [
            {:code => 'IN-ACL'}
        ]
    }
    response = cps_connector_client.call(:change_subscriber_avps) do
      message(mess)
    end
    response.to_hash
  end

  def stop_session_username(username)
    params = {
        audit: { id: 'SOAPGW', comment: 'stop session procedure' },
        key: {
            code: 'UserIdKey',
            primary: false,
            key_field: { code: 'userId', value: username }
        }
    }
    p params
    xml =  cps_connector_client.call(:stop_session) do
      message(params)
    end
    code = xml.to_hash[:stop_session_response]
    p code
  end

  def query_session_username(username)
    params = {
        audit: { id: 'SOAPGW', comment: 'query session procedure' },
        key: {
            code: 'UserIdKey',
            primary: false,
            key_field: { code: 'userId', value: username }
        }
    }
    p params
    xml =  cps_connector_client.call(:query_session) do
      message(params)
    end
    code = xml.to_hash[:query_session_response]
    p code
  end

end