// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_
#define CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_

#include <string>

#include "base/component_export.h"
#include "base/macros.h"

namespace chromeos {

class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkTypePattern {
 public:
  // Matches any network.
  static NetworkTypePattern Default();

  // Matches wireless (WiFi, Cellular, etc.) networks
  static NetworkTypePattern Wireless();

  // Matches Cellular, WiMAX, or Tether networks.
  static NetworkTypePattern Mobile();

  // Matches Physical networks (i.e. excludes Tether and VPN).
  static NetworkTypePattern Physical();

  // Excludes virtual networks and EthernetEAP.
  static NetworkTypePattern NonVirtual();

  // Matches ethernet networks.
  static NetworkTypePattern Ethernet();

  // Matches ethernet or ethernet EAP networks.
  static NetworkTypePattern EthernetOrEthernetEAP();

  static NetworkTypePattern WiFi();
  static NetworkTypePattern Cellular();
  static NetworkTypePattern VPN();
  static NetworkTypePattern Wimax();

  static NetworkTypePattern Tether();

  // Matches only networks of exactly the type |shill_network_type|, which must
  // be one of the types defined in service_constants.h (e.g.
  // shill::kTypeWifi).
  // Note: Shill distinguishes Ethernet without EAP from Ethernet with EAP. If
  // unsure, better use one of the matchers above.
  static NetworkTypePattern Primitive(const std::string& shill_network_type);

  bool Equals(const NetworkTypePattern& other) const;
  bool MatchesType(const std::string& shill_network_type) const;

  // Returns true if this pattern matches at least one network type that
  // |other_pattern| matches (according to MatchesType). Thus MatchesPattern is
  // symmetric and reflexive but not transitive.
  // See the unit test for examples.
  bool MatchesPattern(const NetworkTypePattern& other_pattern) const;

  NetworkTypePattern operator|(const NetworkTypePattern& other) const;

  std::string ToDebugString() const;

 private:
  explicit NetworkTypePattern(int pattern);

  // The bit array of the matching network types.
  int pattern_;

  DISALLOW_ASSIGN(NetworkTypePattern);
};

}  // namespace chromeos

#endif  // CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_
