class MobileStatusUpdateWorker
  include Sidekiq::Worker
  sidekiq_options :queue => :mobile_status, :retry => false, :backtrace => true
  
  def perform(hb_data)
    data = hb_data
    nasid = data["INFO"]["NASID"]
    return if nasid.blank?
    ms_data = data["INTERFACE_STATS"]["UPLINK"].present? ? (data["INTERFACE_STATS"]["UPLINK"].find { |uplink| uplink["MS"].present?} || {})["MS"] : {}
    return if ms_data.blank?
    iccid = (ms_data["ICCID"]||"").gsub('F','')
    imsi = ms_data["IMSI"]
    imei = ms_data["IMEI"]
    cid = ms_data["CID"].present? ? ms_data["CID"].hex : ms_data["CID"]
    ap_details = $redis.hgetall "AP:#{nasid}"
    if(ap_details["ICCID"] != nil)
      if (iccid.present? && iccid != ap_details["ICCID"]) || (cid.present? && ap_details["CID"].to_s != cid.to_s) || (apn.present? && ap_details["APN"] != apn && (Organisation.where(id: ap_details["org_id"].to_i).first.organisation_settings||{})["apn_change_allowed"].present?)
        save_mobile_status_details_in_uplink(data, iccid, cid, apn, imei, imsi)
      end
    else
      save_mobile_status_details_in_uplink(data, iccid, cid, apn, imei, imsi)
    end
  end

  def save_mobile_status_details_in_uplink(data, iccid, cid, apn, imei, imsi)
    router_inventory = RouterInventory.where(mac_id: data["INFO"]["NASID"]).first
    return if router_inventory.blank?
    MonitoringChild.save_mobile_status_details_in_uplink(data,router_inventory, iccid, imei, imsi)
    p "[#{data["INFO"]["NASID"]}]ICCID: #{iccid} | CID: #{cid} | APN: #{apn}"
#    $redis.hset "AP:#{data["INFO"]["NASID"]}", "ICCID", iccid unless iccid.blank?
#    $redis.hset("AP:#{data["INFO"]["NASID"]}", "CID", cid) unless cid.blank?
#    $redis.hset("AP:#{data["INFO"]["NASID"]}", "APN", apn) unless apn.blank?
  end
end
