require 'net/ssh'

class IwagRequester

  attr_accessor :iwag_host, :iwag_login, :iwag_password

  def initialize(iwag_host, iwag_login, iwag_password)
    @iwag_host = iwag_host
    @iwag_login = iwag_login
    @iwag_password = iwag_password
  end

  def mac_parse(mac)
    a = mac.upcase
    pos = a[0] + a[1]
    if pos == "01"
      subscribers_mac = a[2] + a[3] + ":" + a[5] + a[6] + ":" + a[7] + a[8] + ":" + a[10] + a[11] + ":" + a[12] + a[13] + ":" + a[15] + a[16]
    else
      subscribers_mac = a[0] + a[1] + ":" + a[2] + a[3] + ":" + a[5] + a[6] + ":" + a[7] + a[8] + ":" + a[10] + a[11] + ":" + a[12] + a[13]
    end
    subscribers_mac
  end


  def iwag_get_dhcp_binding_ssh(bind_ip)
    mac = "Unknown"
    accessinterface = "Unknown"
    hostname = "Unknown"
    ssid = "Unknown"
    iwag_thr = Thread.new do
      Net::SSH.start(iwag_host, iwag_login, :password => iwag_password) do |session|
        answ_bind = session.exec!("show ip dhcp binding #{bind_ip}")
        regexp_main = /\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}\s{1,20}(\w{2,4}.\w{2,4}.\w{2,4}.\w{2,4})|\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}\s{1,20}(\w{4}.\w{4}.\w{4})/
        #regexp_main = /\r\n(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s+(\S{13,18})\s+Sep 18 2020 07:44 PM\s+Automatic\s+Active\s+Tunnel201\r\n/
        ggg7 = answ_bind.match(regexp_main)
        begin
          if ggg7[1] != nil
            mac = mac_parse(ggg7[1])
          else
            mac = mac_parse(ggg7[2])
          end
        rescue
          mac = "Unknown"
        end
        regexp_remote_id = /Remote id :\s(\S{2,100})/
        regexp_tunnel = /Active\s{2,40}(\S{2,40})|Selecting\s{2,40}(\S{2,40})/
        regexp_curcuit_id = /Circuit id :\s(\S{2,100})/
        ggg9 = answ_bind.match(regexp_tunnel)

        begin
          if ggg9[1] != nil
            accessinterface = ggg9[1]
          else
            accessinterface = ggg9[2]
          end
        rescue
          accessinterface = "Unknown"
        end
        ggg8 = answ_bind.match(regexp_remote_id)
        ggg10 = answ_bind.match(regexp_curcuit_id)
        begin
          a1 = ggg8[1].split(":")
          hostname = a1[0]
          ssid = a1[1]
        rescue
          begin
            if ggg8[1] != nil
              if ggg8[1].include?("wireless_public_interface")
                hostname = ggg10[1]
                ssid = "Unknown"
              else
                hostname = ggg8[1]
                ssid = "Unknown"
              end
            else
              ssid = "Unknown"
              hostname = "Unknown"
            end
          rescue
            ssid = "Unknown"
            hostname = "Unknown"
          end
        end
      end
    end
    iwag_thr.join
    {"mac": mac, "iwaginterface": accessinterface, "aphostname": hostname, "SSID": ssid}
  end

end