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

    if user.is_admin? ||  user.is_super_admin? || user.machine_token_user? || user.is_tier_3? || user.is_tier_2?
      can :manage, RouterInventory, :id => user.organisation.router_inventories.pluck(:id)
      # can :manage, VpnConfig, :id => user.vpn_configs.pluck(:id)
        can :manage, Uplink, router_inventory_id: user.organisation.router_inventories.pluck(:id) 
    elsif user.is_network_admin?
      # permissions = user.unities.pluck(:permission)
      permissions = user.network_tags.keys
      resources = [{ klass: RouterInventory, relation: "user.router_inventories" }]

      if permissions.include?('limited')
        can :read, VpnConfig, :id => user.vpn_configs.pluck(:id)
        can :read, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
        network_admin_common_privileges(user, 'limited', resources)
      end
      if permissions.include?('full')
        can :manage, VpnConfig, :id => user.vpn_configs.pluck(:id)
        network_admin_common_privileges(user, 'full', resources)
      end
    else
      case user.role.try(:name)
      when "monitor_only"
        can [:read, :uptime_slots, :device_details, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :read, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "network_monitor"
        can [:read, :uptime_slots, :device_details, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :read, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "tier_1"
        can [:read, :uptime_slots, :device_details, :get_ssids, :reboot], RouterInventory, :id => user.router_inventories.pluck(:id)
      when "customer_care_devices_senior_experts"
        can [:read, :uptime_slots, :device_details, :save_lat_lng, :update, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :update, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "customer_care_devices_experts"
        can [:read, :uptime_slots, :device_details, :save_lat_lng, :update, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :update, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "customer_care_devices_specialists"
        can [:read, :index, :uptime_slots, :device_details, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
      when "vendor_techs"
        can [:read, :index, :uptime_slots, :device_details, :get_ssids, :update], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :update, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "customer_care_general"
        can [:read, :index, :uptime_slots, :device_details, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :read, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "nw_onboarding_manager"
        can [:read, :index, :uptime_slots, :device_details, :update, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :update, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "nw_onboarding_techs"
        can [:read, :uptime_slots, :device_details, :update, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :update, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "network_r&d"
        can :manage, RouterInventory, :id => user.router_inventories.pluck(:id)
        can :manage, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      when "organization_monitor"
        can [:read, :uptime_slots, :device_details, :get_ssids], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :read, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      else
        can [:read, :get_ssids, :uptime_slots, :device_details], RouterInventory, :id => user.router_inventories.pluck(:id)
        can :read, Uplink, router_inventory_id: user.router_inventories.pluck(:id) 
      end
    end
  end
end