// 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 APPS_SHELL_BROWSER_SHELL_NETWORK_CONTROLLER_CHROMEOS_H_
#define APPS_SHELL_BROWSER_SHELL_NETWORK_CONTROLLER_CHROMEOS_H_

#include <string>

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/timer/timer.h"
#include "base/values.h"
#include "chromeos/network/network_state_handler_observer.h"

namespace apps {

// Handles network-related tasks for app_shell on Chrome OS.
class ShellNetworkController : public chromeos::NetworkStateHandlerObserver {
 public:
  // This class must be instantiated after chromeos::DBusThreadManager and
  // destroyed before it.
  explicit ShellNetworkController(const std::string& preferred_network_name);
  virtual ~ShellNetworkController();

  // chromeos::NetworkStateHandlerObserver overrides:
  virtual void NetworkListChanged() OVERRIDE;
  virtual void NetworkConnectionStateChanged(
      const chromeos::NetworkState* state) OVERRIDE;

 private:
  // State of communication with the connection manager.
  enum State {
    // No in-progress requests.
    STATE_IDLE = 0,
    // Waiting for the result of an attempt to connect to the preferred network.
    STATE_WAITING_FOR_PREFERRED_RESULT,
    // Waiting for the result of an attempt to connect to a non-preferred
    // network.
    STATE_WAITING_FOR_NON_PREFERRED_RESULT,
  };

  // Returns the connected or connecting WiFi network or NULL if no network
  // matches that description.
  const chromeos::NetworkState* GetActiveWiFiNetwork();

  // Controls whether scanning is performed periodically.
  void SetScanningEnabled(bool enabled);

  // Asks the connection manager to scan for networks.
  void RequestScan();

  // If not currently connected or connecting, chooses a wireless network and
  // asks the connection manager to connect to it. Also switches to
  // |preferred_network_name_| if possible.
  void ConnectIfUnconnected();

  // Handles a successful or failed connection attempt.
  void HandleConnectionSuccess();
  void HandleConnectionError(
      const std::string& error_name,
      scoped_ptr<base::DictionaryValue> error_data);

  // Current status of communication with the chromeos::NetworkStateHandler.
  // This is tracked to avoid sending duplicate requests before the handler has
  // acknowledged the initial connection attempt.
  State state_;

  // Invokes RequestScan() periodically.
  base::RepeatingTimer<ShellNetworkController> scan_timer_;

  // Optionally-supplied name of the preferred network.
  std::string preferred_network_name_;

  // True if the preferred network is connected or connecting.
  bool preferred_network_is_active_;

  base::WeakPtrFactory<ShellNetworkController> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(ShellNetworkController);
};

}  // namespace apps

#endif  // APPS_SHELL_BROWSER_SHELL_NETWORK_CONTROLLER_CHROMEOS_H_
