// Copyright (c) 2012 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.

#include "shill/proxy_factory.h"

#include "shill/dbus_properties_proxy.h"
#include "shill/dbus_service_proxy.h"
#include "shill/dhcp/dhcpcd_proxy.h"
#include "shill/logging.h"
#include "shill/permission_broker_proxy.h"
#include "shill/power_manager_proxy.h"
#include "shill/shared_dbus_connection.h"
#include "shill/upstart/upstart_proxy.h"

#if !defined(DISABLE_CELLULAR)
#include "shill/cellular/dbus_objectmanager_proxy.h"
#include "shill/cellular/mm1_bearer_proxy.h"
#include "shill/cellular/mm1_modem_location_proxy.h"
#include "shill/cellular/mm1_modem_modem3gpp_proxy.h"
#include "shill/cellular/mm1_modem_modemcdma_proxy.h"
#include "shill/cellular/mm1_modem_proxy.h"
#include "shill/cellular/mm1_modem_simple_proxy.h"
#include "shill/cellular/mm1_modem_time_proxy.h"
#include "shill/cellular/mm1_sim_proxy.h"
#include "shill/cellular/modem_cdma_proxy.h"
#include "shill/cellular/modem_gobi_proxy.h"
#include "shill/cellular/modem_gsm_card_proxy.h"
#include "shill/cellular/modem_gsm_network_proxy.h"
#include "shill/cellular/modem_manager_proxy.h"
#include "shill/cellular/modem_proxy.h"
#include "shill/cellular/modem_simple_proxy.h"
#endif

#if !defined(DISABLE_WIFI)
#include "shill/supplicant/supplicant_bss_proxy.h"
#endif  // DISABLE_WIFI

#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X)
#include "shill/supplicant/supplicant_interface_proxy.h"
#include "shill/supplicant/supplicant_network_proxy.h"
#include "shill/supplicant/supplicant_process_proxy.h"
#endif  // DISABLE_WIFI || DISABLE_WIRED_8021X

#if !defined(DISABLE_WIMAX)
#include "shill/wimax/wimax_device_proxy.h"
#include "shill/wimax/wimax_manager_proxy.h"
#include "shill/wimax/wimax_network_proxy.h"
#endif

using std::string;

namespace shill {

namespace {
base::LazyInstance<ProxyFactory> g_proxy_factory = LAZY_INSTANCE_INITIALIZER;
}  // namespace

ProxyFactory::ProxyFactory() {}

ProxyFactory::~ProxyFactory() {}

ProxyFactory* ProxyFactory::GetInstance() {
  return g_proxy_factory.Pointer();
}

DBus::Connection* ProxyFactory::GetConnection() const {
  return SharedDBusConnection::GetInstance()->GetProxyConnection();
}

DBusPropertiesProxyInterface* ProxyFactory::CreateDBusPropertiesProxy(
    const string& path,
    const string& service) {
  return new DBusPropertiesProxy(GetConnection(), path, service);
}

DBusServiceProxyInterface* ProxyFactory::CreateDBusServiceProxy() {
  return new DBusServiceProxy(GetConnection());
}

PowerManagerProxyInterface* ProxyFactory::CreatePowerManagerProxy(
    PowerManagerProxyDelegate* delegate) {
  return new PowerManagerProxy(delegate, GetConnection());
}

#if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X)
SupplicantProcessProxyInterface* ProxyFactory::CreateSupplicantProcessProxy(
    const char* dbus_path,
    const char* dbus_addr) {
  return new SupplicantProcessProxy(GetConnection(), dbus_path, dbus_addr);
}

SupplicantInterfaceProxyInterface* ProxyFactory::CreateSupplicantInterfaceProxy(
    SupplicantEventDelegateInterface* delegate,
    const DBus::Path& object_path,
    const char* dbus_addr) {
  return new SupplicantInterfaceProxy(delegate,
                                      GetConnection(),
                                      object_path,
                                      dbus_addr);
}

SupplicantNetworkProxyInterface* ProxyFactory::CreateSupplicantNetworkProxy(
    const DBus::Path& object_path,
    const char* dbus_addr) {
  return new SupplicantNetworkProxy(GetConnection(),
                                    object_path,
                                    dbus_addr);
}
#endif  // DISABLE_WIFI || DISABLE_WIRED_8021X

#if !defined(DISABLE_WIFI)
SupplicantBSSProxyInterface* ProxyFactory::CreateSupplicantBSSProxy(
    WiFiEndpoint* wifi_endpoint,
    const DBus::Path& object_path,
    const char* dbus_addr) {
  return new SupplicantBSSProxy(
      wifi_endpoint, GetConnection(), object_path, dbus_addr);
}
#endif  // DISABLE_WIFI

DHCPProxyInterface* ProxyFactory::CreateDHCPProxy(const string& service) {
  return new DHCPCDProxy(GetConnection(), service);
}

UpstartProxyInterface* ProxyFactory::CreateUpstartProxy() {
  return new UpstartProxy(GetConnection());
}

PermissionBrokerProxyInterface* ProxyFactory::CreatePermissionBrokerProxy() {
  return new PermissionBrokerProxy(GetConnection());
}

#if !defined(DISABLE_CELLULAR)

DBusObjectManagerProxyInterface* ProxyFactory::CreateDBusObjectManagerProxy(
    const string& path,
    const string& service) {
  return new DBusObjectManagerProxy(GetConnection(), path, service);
}

ModemManagerProxyInterface* ProxyFactory::CreateModemManagerProxy(
    ModemManagerClassic* manager,
    const string& path,
    const string& service) {
  return new ModemManagerProxy(GetConnection(), manager, path, service);
}

ModemProxyInterface* ProxyFactory::CreateModemProxy(
    const string& path,
    const string& service) {
  return new ModemProxy(GetConnection(), path, service);
}

ModemSimpleProxyInterface* ProxyFactory::CreateModemSimpleProxy(
    const string& path,
    const string& service) {
  return new ModemSimpleProxy(GetConnection(), path, service);
}

ModemCDMAProxyInterface* ProxyFactory::CreateModemCDMAProxy(
    const string& path,
    const string& service) {
  return new ModemCDMAProxy(GetConnection(), path, service);
}

ModemGSMCardProxyInterface* ProxyFactory::CreateModemGSMCardProxy(
    const string& path,
    const string& service) {
  return new ModemGSMCardProxy(GetConnection(), path, service);
}

ModemGSMNetworkProxyInterface* ProxyFactory::CreateModemGSMNetworkProxy(
    const string& path,
    const string& service) {
  return new ModemGSMNetworkProxy(GetConnection(), path, service);
}

ModemGobiProxyInterface* ProxyFactory::CreateModemGobiProxy(
    const string& path,
    const string& service) {
  return new ModemGobiProxy(GetConnection(), path, service);
}

// Proxies for ModemManager1 interfaces
mm1::ModemModem3gppProxyInterface* ProxyFactory::CreateMM1ModemModem3gppProxy(
      const string& path,
      const string& service) {
  return new mm1::ModemModem3gppProxy(GetConnection(), path, service);
}

mm1::ModemModemCdmaProxyInterface* ProxyFactory::CreateMM1ModemModemCdmaProxy(
      const string& path,
      const string& service) {
  return new mm1::ModemModemCdmaProxy(GetConnection(), path, service);
}

mm1::ModemProxyInterface* ProxyFactory::CreateMM1ModemProxy(
      const string& path,
      const string& service) {
  return new mm1::ModemProxy(GetConnection(), path, service);
}

mm1::ModemSimpleProxyInterface* ProxyFactory::CreateMM1ModemSimpleProxy(
      const string& path,
      const string& service) {
  return new mm1::ModemSimpleProxy(GetConnection(), path, service);
}

mm1::ModemTimeProxyInterface* ProxyFactory::CreateMM1ModemTimeProxy(
      const string& path,
      const string& service) {
  return new mm1::ModemTimeProxy(GetConnection(), path, service);
}

mm1::ModemLocationProxyInterface* ProxyFactory::CreateMM1ModemLocationProxy(
      const string& path,
      const string& service) {
  return new mm1::ModemLocationProxy(GetConnection(), path, service);
}

mm1::SimProxyInterface* ProxyFactory::CreateSimProxy(
      const string& path,
      const string& service) {
  return new mm1::SimProxy(GetConnection(), path, service);
}

mm1::BearerProxyInterface* ProxyFactory::CreateBearerProxy(
      const string& path,
      const string& service) {
  return new mm1::BearerProxy(GetConnection(), path, service);
}

#endif  // DISABLE_CELLULAR

#if !defined(DISABLE_WIMAX)

WiMaxDeviceProxyInterface* ProxyFactory::CreateWiMaxDeviceProxy(
    const string& path) {
  return new WiMaxDeviceProxy(GetConnection(), path);
}

WiMaxManagerProxyInterface* ProxyFactory::CreateWiMaxManagerProxy() {
  return new WiMaxManagerProxy(GetConnection());
}

WiMaxNetworkProxyInterface* ProxyFactory::CreateWiMaxNetworkProxy(
    const string& path) {
  return new WiMaxNetworkProxy(GetConnection(), path);
}

#endif  // DISABLE_WIMAX

}  // namespace shill
