// Copyright 2018 The Fuchsia 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 SRC_LEDGER_BIN_APP_PAGE_USAGE_LISTENER_H_
#define SRC_LEDGER_BIN_APP_PAGE_USAGE_LISTENER_H_

#include "src/ledger/bin/storage/public/types.h"

namespace ledger {

// A listener on page usage, that receives notifications when a page is  opened
// or closed.
class PageUsageListener {
 public:
  PageUsageListener() {}
  virtual ~PageUsageListener() {}

  // Called when a page connection has been requested. In case of concurrent
  // connections to the same page, this should only be called once, on the first
  // connection.
  virtual void OnPageOpened(fxl::StringView ledger_name,
                            storage::PageIdView page_id) = 0;

  // Called when all external connections to a page are closed. In case of
  // concurrent connections to the same page, this should only be called once,
  // when the last connection closes.
  // TODO(nellyv): Add argument on whether the page is synced and and cache it.
  virtual void OnPageClosed(fxl::StringView ledger_name,
                            storage::PageIdView page_id) = 0;

  // Called when there are no longer any active connections to a page. This
  // includes both internal and external connections. Note that if the last
  // active connection to a page is an external one, both |OnPageClosed| and
  // then |OnPageUnused| will be called.
  virtual void OnPageUnused(fxl::StringView ledger_name,
                            storage::PageIdView page_id) = 0;

 private:
  FXL_DISALLOW_COPY_AND_ASSIGN(PageUsageListener);
};

}  // namespace ledger

#endif  // SRC_LEDGER_BIN_APP_PAGE_USAGE_LISTENER_H_
