namespace :unity do
  desc "remove older unities and create new unities in new way"
  task RefactorUnities: :environment do
    User.all.each do |user|
      $redis.hset "USER:CURRENT_NETWORK", "#{user.id}", "#{user.unities.find_by_current_network("yes").try(:location_network_id)}"
      user.unities.destroy_all
      if !(user.is_admin? || user.is_super_admin || user.machine_token_user?)
        unity = []
        full_access = user.network_tags[:full] || []
        limited_access = user.network_tags[:limited] || []

        if !((full_access.present? && full_access.include?("all:all")) ||(limited_access.present? && limited_access.include?("all:all")))
          full_access.each do |locatable|
            if locatable.include?('Tag')
              unity << {locatable_id: ActsAsTaggableOn::Tag.find_by_name(locatable.split(':')[1]).try(:id), role_id: user.role_id, permission: 'full', locatable_type: "ActsAsTaggableOn::Tag"}
            else
              unity << {locatable_id: locatable.split(':')[1], role_id: user.role_id, permission: 'full', locatable_type: "LocationNetwork"}
            end
          end

          limited_access.each do |locatable|
            if locatable.include?('Tag')
              unity << {locatable_id: ActsAsTaggableOn::Tag.find_by_name(locatable.split(':')[1]).try(:id), role_id: user.role_id, permission: 'limited', locatable_type: "ActsAsTaggableOn::Tag"}
            else
              unity << {locatable_id: locatable.split(':')[1], role_id: user.role_id, permission: 'limited', locatable_type: "LocationNetwork"}
            end
          end
        end
        user.unities.create(unity) unless unity.blank?
      end
    end
  end
end