// Copyright 2019 The Chromium OS 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 SHILL_TECHNOLOGY_H_
#define SHILL_TECHNOLOGY_H_

#include <iostream>
#include <string>
#include <vector>

namespace shill {

class Error;
class Technology;

// Convert a comma-separated list of technology names (with no whitespace
// around commas) into a vector of Technology instances output in
// |technologies_vector|. Returns true if the |technologies_string| contains a
// valid set of technologies with no duplicate elements, false otherwise.
bool GetTechnologyVectorFromString(const std::string& technologies_string,
                                   std::vector<Technology>* technologies_vector,
                                   Error* error);

// A class representing a particular network technology type.
class Technology {
 public:
  enum Type {
    kEthernet,
    kEthernetEap,
    kWifi,
    kWiFiMonitor,
    kCellular,
    kVPN,
    kTunnel,
    kBlocked,
    kLoopback,
    kCDCEthernet,      // Only for internal use in DeviceInfo.
    kVirtioEthernet,   // Only for internal use in DeviceInfo.
    kNoDeviceSymlink,  // Only for internal use in DeviceInfo.
    kPPP,
    kPPPoE,
    kArcBridge,
    // Virtual tap devices used by guest OS and clients getting Internet via
    // Chrome OS host kernel.
    kGuestInterface,
    kUnknown,
  };

  // Return a Technology instance given the technology name, or
  // Technology::kUnknown if the technology name is unknown.
  static Technology CreateFromName(const std::string& name);

  // Return a Technology instance for a storage group identifier in |group|
  // |group|, which should have the format of <technology name>_<suffix>, or
  // Technology::kUnknown if |group| is not prefixed with a known technology
  // name.
  static Technology CreateFromStorageGroup(const std::string& group);

  Technology() : Technology(kUnknown) {}
  // Not explicit so that Types can be passed to methods taking Technologies.
  Technology(Type type) : type_(type) {}

  // Allow for Technology to be used as a Type (useful for
  // comparisons/switch-cases involving Types).
  operator Type() const { return type_; }

  std::string GetName() const;

  // Return true if |technology| is a primary connectivity technology, i.e.
  // Ethernet, Cellular, WiFi, or PPPoE.
  bool IsPrimaryConnectivityTechnology() const;

 private:
  Type type_;
};

// Add the Technology name to the ostream.
std::ostream& operator<<(std::ostream& os, const Technology& technology);

}  // namespace shill

#endif  // SHILL_TECHNOLOGY_H_
