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

    if user.is_admin? || user.is_super_admin || user.machine_token_user?
      can :manage, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id)
    elsif user.is_network_admin?
      can [:read, :update,:user_setting,:update_user_setting], User, :id => user.id
    else
      case user.role.try(:name)
      when "monitor_only"
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "network_monitor"
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "customer_care_devices_senior_experts"
        can :read, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id) - [user.id]
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "customer_care_devices_experts"
        can :read, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id) - [user.id]
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "customer_care_devices_specialists"
        can :read, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id) - [user.id]
        can [:user_setting, :update_user_setting], User, :id => user.id
      when "vendor_techs"
        can :read, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id) - [user.id]
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "customer_care_general"
        can :read, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id) - [user.id]
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "nw_onboarding_manager"
        can [:user_setting,:update_user_setting], User, :id => user.id
      when "nw_onboarding_techs"
        can [:user_setting,:update_user_setting], User, :id => user.id        
      when "network_r&d"
        can :read, User, :id => User.where(organisation_id: user.organisation_id).pluck(:id) - [user.id]
        can [:read, :user_setting,:update_user_setting], User, :id => user.id
      when "organization_monitor"
        can [:user_setting,:update_user_setting], User, :id => user.id
      else
        can [:user_setting,:update_user_setting], User, :id => user.id
      end
    end
  end
end