class MonitoringDataCapped
  include Mongoid::Document

  field :info, type: Hash, default: {}
  field :s_info, type: Hash, default: {}
  field :m_info, type: Hash, default: {}
  field :lan, type: Hash, default: {}
  field :uplink, type: Array, default: []
  field :ssids, type: Array, default: []
  field :clients, type: Array, default: []
  field :cmd_res, type: Array, default: []
  field :sensor_data, type: Hash, default: {}
  field :radio, type: Array, default: []
  field :sw_prt, type: Array, default: []
  field :created_at, type: Time

  index({"info.NASID" => 1, "created_at" => 1}, { background: true })
  index({"created_at" => 1}, { background: true, expire_after_seconds: 3.hour })
  index({"info.NASID" => 1, "clients.MAC"=> 1}, { background: true })

  def self.save_hb(data)
    # data = JSON.parse(data)
    #Make sure MAC id should be in upcase
    data["INFO"]["NASID"] = data["INFO"]["NASID"].try(:upcase)
    mc = self.new
    mc.info = data["INFO"]
    if data["INTERFACE_STATS"].present?
      if data["INTERFACE_STATS"]["UPLINK"].nil?
        uplink = data["INTERFACE_STATS"].delete("LAN")
        uplink = [uplink] unless uplink.is_a? Array
      else
        uplink = data["INTERFACE_STATS"].delete("UPLINK")
        uplink = [uplink] unless uplink.is_a? Array
      end
      mc.s_info = data["SYSTEM_INFO"]
      mc.m_info = data["MEMINFO"]
      mc.lan = data["INTERFACE_STATS"].delete("LAN")
      mc.uplink = uplink
      mc.ssids = data["INTERFACE_STATS"].values
      mc.clients = data["WLAN_CLIENTS"]
      mc.cmd_res = data["COMMAND_RESULTS"]
    end
    mc.sensor_data = data["SENSORS_DATA"] || {}
    mc.radio = data["RD"] || data["RADID"] || []
    mc.sw_prt = data["SW_PRT"] || []
    mc.created_at = Time.zone.now.utc

    mc.save
  end

  def self.ap_last_hb(mac_id, ts)
    MonitoringChild.where("info.NASID" => mac_id.upcase, "created_at" => {"$lt" => ts}).desc("created_at").first
  end

  
end
