// Copyright 2017 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.

import {StoreObserver} from 'chrome://resources/js/cr/ui/store.m.js';
import {StoreClient as CrUiStoreClient} from 'chrome://resources/js/cr/ui/store_client.m.js';

import {Store} from './store.js';
import {BookmarksPageState} from './types.js';

/**
 * @fileoverview Defines StoreClient, a Polymer behavior to tie a front-end
 * element to back-end data from the store.
 */

/**
 * @polymerBehavior
 */
const BookmarksStoreClientImpl = {
  /**
   * @param {string} localProperty
   * @param {function(Object)} valueGetter
   */
  watch(localProperty, valueGetter) {
    this.watch_(localProperty, valueGetter);
  },

  /**
   * @return {BookmarksPageState}
   */
  getState() {
    return this.getStore().data;
  },

  /**
   * @return {Store}
   */
  getStore() {
    return Store.getInstance();
  },
};

/**
 * @polymerBehavior
 * @implements {StoreObserver<BookmarksPageState>}
 */
export const StoreClient = [CrUiStoreClient, BookmarksStoreClientImpl];
