require 'net/ssh'
require 'uri'
require "erb"
include ERB::Util

require 'imperituroard/platforms/staros/get_data_ssh'


class Ukaz60Staros_2

  attr_accessor :staros_platform_get,
                :ukaz60_http_groups,
                :ukaz60_https_groups,
                :staros_hosts

  def initialize(star_login, star_password, ukaz60_http_groups, ukaz60_https_groups, staros_hosts)
    @staros_platform_get = StarosGet_2.new(star_login, star_password)
    @ukaz60_http_groups = ukaz60_http_groups
    @ukaz60_https_groups = ukaz60_https_groups
    @staros_hosts = staros_hosts
  end


  #get data from staros and return urls from staros
  def get_data_staros(ip_staros)

    input_data = {:ip_staros => ip_staros}
    output_data = {}
    ecs_name = ""
    blocked_urls_http = []
    blocked_urls_https = []

    begin
      ecs_config_json = staros_platform_get.get_all_active_charging(ip_staros)

      if ecs_config_json[:code] == 200

        #get ecs name
        ecs_sss = ecs_config_json[:parsed_data]["config"]["active-charging service"][0]
        ecs_sss.each do |hhh|
          ecs_name = hhh[0]
        end

        regexp_ruldef = /add-ruledef priority \d+ ruledef (.+)/

        #for http urls
        begin
          ukaz60_http_groups.each do |rule|
            group_ruled_ukaz60 = ecs_config_json[:parsed_data]["config"]["active-charging service"][0][ecs_name]["group-of-ruledefs"][rule]

            group_ruled_ukaz60.each do |gr_rul_str|
              ruledef_name = gr_rul_str.match(regexp_ruldef)[1]
              rdef_config = ecs_config_json[:parsed_data]["config"]["active-charging service"][0][ecs_name]["ruledef"][ruledef_name]
              rdef_config.each do |g|
                if g[0..15] == "www url contains"
                  blocked_urls_http.push({:url => g.gsub("www url contains ", ""), :ruledef => ruledef_name, :gr_of_ruledefs => rule, :gr_rul_str => gr_rul_str})
                end
              end
            end
          end
        rescue
          blocked_urls_http.push("failed")
        end

        for https_rule in ukaz60_https_groups
          group_rule_https = ecs_config_json[:parsed_data]["config"]["active-charging service"][0][ecs_name]["group-of-ruledefs"][https_rule]
        end

        output_data = {:code => 200, :result => "Success", :ecs_name => ecs_name, :blocked_urls_http => blocked_urls_http, :http_rules_num => blocked_urls_http.length}

      else
        output_data = ecs_config_json
      end
    rescue
      output_data = {:code => 507, :result => "get_data_staros: Unknown SDK error"}
    end
    output_data
    # Net::SSH.start("172.24.214.17", "starscript", :password => "$rfv3EDC") do |ssh|
    #   staros_answer = ssh.exec!("show configuration active-charging service all")
    #   p staros_answer
    #
    #   staros_answer = staros_answer.gsub("\n", "")
    #
    #   regexp_ukaz60_9 = /group-of-ruledefs Ukaz60-9_HTTP.+HTTP\s+#exit/
    #   regexp_ukaz60_https = /group-of-ruledefs Ukaz60_HTTPS.+HTTPS\s+#exit/
    #   regexp_ukaz60_7 = /group-of-ruledefs Ukaz60-7_HTTP.+HTTP\s+#exit/
    #
    #
    #
    #   group_ruled_ukaz60_9 = staros_answer.match(regexp_ukaz60_9)[0]
    #   group_ruled_ukaz60_https = staros_answer.match(regexp_ukaz60_https)[0]
    #   group_ruled_ukaz60_7 = staros_answer.match(regexp_ukaz60_7)[0]
    #
    #   p group_ruled_ukaz60_9
    #   p group_ruled_ukaz60_https
    #   p group_ruled_ukaz60_7
    #
    # end
  end


  #procedure for get data from all MPC
  def get_all_staros_ukaz60

    returned_data = {:mpc_data => [], :add_format => {}}
    get_all_staros_ukaz60_1 = []

    begin
      staros_hosts.each do |ggsn|
        get_all_staros_ukaz60_1 << Thread.new do
          begin
            mpc_data = self.get_data_staros(ggsn[1])
            returned_data[:mpc_data].push({:code => 200, :result => "Success", :hostname => ggsn[0], :host_ip => ggsn[1], :body => mpc_data})
            returned_data[:add_format][ggsn[0]] = mpc_data
          rescue
            returned_data[:mpc_data].push({:code => 507, :result => "Unknown thread error", :hostname => ggsn[0], :host_ip => ggsn[1], :body => {}})
          end
        end
      end
      get_all_staros_ukaz60_1.each(&:join)
      returned_data[:code] = 200
      returned_data[:result] = "get_all_staros_ukaz60: Success"
    rescue
      returned_data[:code] = 507
      returned_data[:result] = "get_all_staros_ukaz60: Unknown SDK error"
    end
    returned_data
  end
end


uu ="/fgd?ef"

#ggg = uu.force_encoding('ASCII-8BIT')
#puts CGI.escape ggg
p url_encode("foo/bar? baz&")

p URI.parse("foo/bar? baz&").to_s
p URI::encode("foo/bar? baz&")

p URI.decode("newsx-ru.ru/by/251-potencia-spartagen-by/%3futm%20medium=251&utmcampaign=4&%20utm%20content=57849345&utm%20source=56960717")