// Copyright 2016 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 SERVICES_CATALOG_INSTANCE_H_
#define SERVICES_CATALOG_INSTANCE_H_

#include "base/files/file_path.h"
#include "base/path_service.h"
#include "base/values.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/catalog/entry.h"
#include "services/catalog/public/interfaces/catalog.mojom.h"
#include "services/catalog/store.h"

namespace catalog {

class EntryCache;
class ManifestProvider;

class Instance : public mojom::Catalog {
 public:
  // Neither |system_cache| nor |service_manifest_provider| is owned.
  // |service_manifest_provider| may be null
  Instance(EntryCache* system_cache,
           ManifestProvider* service_manifest_provider);
  ~Instance() override;

  void BindCatalog(mojom::CatalogRequest request);

  const Entry* Resolve(const std::string& service_name);

 private:
  // mojom::Catalog:
  void GetEntries(const base::Optional<std::vector<std::string>>& names,
                  GetEntriesCallback callback) override;
  void GetEntriesProvidingCapability(
      const std::string& capability,
      GetEntriesProvidingCapabilityCallback callback) override;

  mojo::BindingSet<mojom::Catalog> catalog_bindings_;

  // A map of name -> Entry data structure for system-level packages (i.e. those
  // that are visible to all users).
  // TODO(beng): eventually add per-user applications.
  EntryCache* const system_cache_;

  // A runtime interface the embedder can use to provide dynamic manifest data
  // to be queried on-demand if something can't be found in |system_cache_|.
  ManifestProvider* const service_manifest_provider_;

  DISALLOW_COPY_AND_ASSIGN(Instance);
};

}  // namespace catalog

#endif  // SERVICES_CATALOG_INSTANCE_H_
