class PublicActivity::Activity
  default_scope -> { where.not(trackable_type: "Command") } 
  after_create :custom_after_create_callback
  before_create :set_attr
  serialize :parameters, Hash
    def json_build
    { id: self.id, object_id: self.trackable_id, action: self.key.split('.').last, object_type: self.trackable_type, parameters: self.parameters, organisation_id: self.organisation_id, location_network_id: self.location_network_id, clone_network_id: LocationNetwork.find_by_id(self.location_network_id).try(:cloned_network_id) }
  end

  private

  def set_attr
    self.owner_id = Thread.current[:current_user_id] if self.owner_id.blank? && Thread.current[:current_user_id].present?
    if self.key == "uplink.update"
      self.router_inventory_id = self.trackable.try(:router_inventory_id)
      self.location_network_id = self.trackable.try(:router_inventory).try(:location_network_id)
      self.organisation_id = LocationNetwork.find_by_id(self.location_network_id).try(:organisation_id)
    end  

    unless self.trackable_type.match(/create/) 
      self.location_network_id = self.trackable.try(:location_network_id) if self.location_network_id.blank? 
      if self.organisation_id.blank?
        self.organisation_id = self.trackable.try(:organisation_id) 
        self.organisation_id = self.trackable.try(:location_network).try(:organisation_id) if self.organisation_id.blank?
      end
    end

    unless self.key.split('.')[1] != 'update'
      ((self.parameters[:attributes] || {}).values[0] || {}).each do |a,b|  
        if ((b[0] == b[1]) || (b[0] == nil && b[1] == ""))
          self.parameters[:attributes].values[0].delete(a)
        end
      end
    end
  end

  def custom_after_create_callback
    if ['NetworkSsid'].include?(self.trackable_type)
      location_network = LocationNetwork.find_by_id(self.location_network_id)
      activity_alert = location_network.alerts.includes(:alert_rules).where(category: 'activity').where('alert_rules.condition = ? OR alert_rules.condition = ?', self.key.split('.')[1], 'all').references(:alert_rules).last
      if activity_alert 
        payload_data = json_build
        activity_alert.notify_activity_alert?(payload_data)
      end
    end
  end
end
