class ActivityLog < ActiveRecord::Base

  def self.replace_hash(v)
    data = {'1' => 'Enabled','0' => 'disabled','true' => 'Enabled','false' => 'disabled',"location_network_id" => "network name","src_ip" => "source ip",'dst_ip' => "destination ip","src_bitmask" => "source_bitmask","dst_bitmask" => "destination bitmask",'src_port' => "source port",'dst_port' => 'destination port','role_id' => "role","encrypted_password" => 'passowrd','auth_radius_id' => "radius",'acc_radius_id' => 'radius accounting','acc radius enabled' => "radius enabled","is_enabled" => "network enabled","is_hidden" => 'SSID hidden','is_isolate' => 'SSID isolate','scr_bitmask' => 'source bitmask','router_inventory_id' => 'device','hardware_part_id' => 'hardware model','presence' => 'router_presence','is_disable' => 'radio setting',"RouterInventory" => 'Devices / Networks / Tags','LocationNetwork' => 'Devices / Networks / Tags','ActsAsTaggableOn::Tag' => 'Devices / Networks / Tags', "associated_aps_and_tags" => 'Devices / Networks / Tags', 'associated_resources' => 'Devices / Networks / Tags', 'network_ssid_id' => 'SSID name'}
    if data.has_key?v
      v = data[v]
    end
    return v.split('_').join(' ')
  end

  def self.activity_description(log)
    hsh1 = {}
    hsh2 = {}
    (log.parameters[:attributes] || [] ).each do |a,b|
      if b.blank?
        hsh1["changes_on"] = a.split('_').join(' ').upcase
        return hsh1
      end
      unless b.blank?
        b.each do |k, v|
        hsh1["changes_on"] = a.split('_').join(' ').upcase
        hsh1["changed_values"] = hsh2
          b.delete(k) if (User::MODEL_NAME_MAP.include?k) || (['id','created_at','updated_at','upload_time', 'organisation_id', 'org_id', 'ln_id', '_id'].include?k)
          if ['location_network_id','LocationNetwork'].include?k
            v[0] = LocationNetwork.find_by_id(v[0]).try(:network_name)
            v[1] = LocationNetwork.find_by_id(v[1]).try(:network_name)
          elsif ['network_ssid_id'].include?k
            v[0] = NetworkSsid.find_by_id(v[0]).try(:ssid_name)
            v[1] = NetworkSsid.find_by_id(v[1]).try(:ssid_name)
          elsif ['hardware_part_id'].include?k
            v[0] = HardwarePart.find_by_id(v[0]).try(:name)
            v[1] = HardwarePart.find_by_id(v[1]).try(:name)
          elsif ['role_id'].include?k
            v[0] = Role.find_by_id(v[0]).try(:name)
            v[1] = Role.find_by_id(v[1]).try(:name)
          elsif ['auth_radius_id','acc_radius_id'].include?k
            v[0] = RadiusConfiguration.find_by_id(v[0]).try(:radius_name)
            v[1] = RadiusConfiguration.find_by_id(v[1]).try(:radius_name)
          elsif ['encrypted_password'].include?k
            v[0] = 'old'
            v[1] = 'new'
          elsif ['RouterInventory', "router_inventory_id"].include?k
            v[0] = RouterInventory.find_by_id(v[0]).try(:mac_id)
            v[1] = RouterInventory.find_by_id(v[1]).try(:mac_id)
          elsif ['ActsAsTaggableOn::Tag'].include?k
            v[0] = ActsAsTaggableOn::Tag.find_by_id(v[0]).try(:name)
            v[1] = ActsAsTaggableOn::Tag.find_by_id(v[1]).try(:name)
          end
        end
          if log.key.split('.')[1] == 'create'
            b.each do |c,d|
              hsh2["#{replace_hash(c).split('_').join(' ')}"] = [replace_hash(d[0].to_s), d[1].to_s.blank? ? '" "' : replace_hash(c) == "passowrd" ? "********" : replace_hash(d[1].to_s)]
            end
          else
            b.each do |c,d|
              if c == "assumed"
                hsh2["#{replace_hash(c).split('_').join(' ')}"] = [replace_hash(d[0].to_s), d[1].to_s.blank? ? '" "' : replace_hash(d[1].to_s)]
              else
                hsh2["#{replace_hash(c).split('_').join(' ')}"] = [replace_hash(d[0].to_s), d[1].to_s.blank? ? '" "' : replace_hash(d[1].to_s) ] #unless d[0].to_s.blank?
              end
            end 
          end
      else
        if b.blank? && log.key.split('.')[1] == "update"
        else
          unless a.include?("v_lan")
            if log.key.split('.')[1] == 'logout'
              hsh2["#{a.split('(').last.split(')').first}"] if a.split('(').last.split(')').first
            else
              hsh2["#{a.split('(').last.split(')').first.upcase}"] if a.split('(').last.split(')').first
            end
          else
          end
        end
      end
    end
    (log.parameters[:associated_attributes] || [] ).each do |a,b|
      (a || []).each do |c,d|
        hsh1["#{c.split('_').join(' ').upcase}"] = hsh2
        d.each do |e,f|
          unless f[0].blank? && f[1].blank?
            hsh2["#{replace_hash(e).split('_').join(' ')}"] = [replace_hash(f[0].to_s), f[1].to_s.blank? ? '" "' : replace_hash(f[1].to_s)] #unless f[0].to_s.blank?
          end
        end
      end
    end
    hsh1
  end

end