class Ability::VLanAbility < Ability::BaseAbility
  def initialize(user)
    super 

    if user.is_admin? || user.is_super_admin? || user.machine_token_user?
      can :manage, VLan, :id => VLan.where(organisation_id: user.organisation_id).where.not(location_network_id: nil).pluck(:id)
    elsif user.is_network_admin?
      # permissions = user.unities.pluck(:permission)
      permissions = user.network_tags.keys
      if permissions.include?('limited')
        can :read, VLan, :id => user.networks_with_limited_access.map {|v| v.v_lan_ids}.flatten
      end
      if permissions.include?('full')
        can :manage, VLan, :id => user.networks_with_full_access.map {|v| v.v_lan_ids}.flatten
      end
    else
      case user.role.try(:name)
      when "customer_care_devices_senior_experts"
        can [:read, :update, :verify_ip], VLan, :id => VLan.where(location_network_id: user.location_networks.pluck(:id)).pluck(:id)
      when "customer_care_devices_experts"
        can [:read, :update, :verify_ip], VLan, :id => VLan.where(location_network_id: user.location_networks.pluck(:id)).pluck(:id)
      when "customer_care_devices_specialists"
        can :read, VLan, id: VLan.where(location_network_id: user.location_networks.pluck(:id))
      when "vendor_techs"
        can :read, VLan, id: VLan.where(location_network_id: user.location_networks.pluck(:id))
      when "customer_care_general"
        can :read, VLan, id: VLan.where(location_network_id: user.location_networks.pluck(:id))
      when "nw_onboarding_manager"
        can :read, VLan, id: VLan.where(location_network_id: user.location_networks.pluck(:id)).pluck(:id)
      when "nw_onboarding_techs"
        # can :read, VLan, id: VLan.where(location_network_id: user.location_networks.pluck(:id)).pluck(:id)
        can [:read, :update, :verify_ip], VLan, :id => VLan.where(location_network_id: user.location_networks.pluck(:id)).pluck(:id)
      when "network_r&d"
        can :manage, VLan, id: VLan.where(location_network_id: user.location_networks.pluck(:id)).pluck(:id)
      end
    end
  end
end 