// Copyright (c) 2011 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 CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_MODEL_H_
#define CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_MODEL_H_
#pragma once

#include <string>

#include "base/string16.h"
#include "net/base/cert_database.h"

namespace chromeos {

// Data model for Wi-Fi connection configuration dialog.  Mostly concerned
// with certificate management for Extensible Authentication Protocol (EAP)
// enterprise networks.
class WifiConfigModel {
 public:
  // Constructs a model with empty lists of certificates.  If you are
  // configuring a 802.1X network, call UpdateCertificates() to build the
  // internal cache of certificate names and IDs.
  WifiConfigModel();
  ~WifiConfigModel();

  // Updates the cached certificate lists.
  void UpdateCertificates();

  // Returns the number of user certificates.
  int GetUserCertCount() const;

  // Returns a user-visible name for a given user certificate.
  string16 GetUserCertName(int cert_index) const;

  // Returns the PKCS#11 ID for a given user certificate.
  std::string GetUserCertPkcs11Id(int cert_index) const;

  // Returns the cert_index for a given PKCS#11 user certificate ID,
  // or -1 if no certificate with that ID exists.
  int GetUserCertIndex(const std::string& pkcs11_id) const;

  // Returns the number of server CA certificates.
  int GetServerCaCertCount() const;

  // Returns a user-visible name for a given server CA certificate.
  string16 GetServerCaCertName(int cert_index) const;

  // Returns the NSS nickname for a given server CA certificate.
  std::string GetServerCaCertNssNickname(int cert_index) const;

  // Returns the cert_index for a given server CA certificate NSS nickname,
  // or -1 if no certificate with that ID exists.
  int GetServerCaCertIndex(const std::string& nss_nickname) const;

 private:
  net::CertDatabase cert_db_;

  // List of user certificates, sorted by name.
  net::CertificateList user_certs_;

  // List of server CA certificates, sorted by name.
  net::CertificateList server_ca_certs_;

  DISALLOW_COPY_AND_ASSIGN(WifiConfigModel);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_MODEL_H_