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

/**
 * @fileoverview A helper object used from the the People section to interact
 * with the Easy Unlock functionality of the browser. ChromeOS only.
 */
cr.exportPath('settings');

cr.define('settings', function() {
  /** @interface */
  class EasyUnlockBrowserProxy {
    /**
     * Returns a true promise if Easy Unlock is already enabled on the device.
     * @return {!Promise<boolean>}
     */
    getEnabledStatus() {}

    /**
     * Returns the Easy Unlock turn off flow status.
     * @return {!Promise<string>}
     */
    getTurnOffFlowStatus() {}

    /**
     * Begins the Easy Unlock turn off flow.
     */
    startTurnOffFlow() {}

    /**
     * Cancels any in-progress Easy Unlock turn-off flows.
     */
    cancelTurnOffFlow() {}
  }

  /**
   * @implements {settings.EasyUnlockBrowserProxy}
   */
  class EasyUnlockBrowserProxyImpl {
    /** @override */
    getEnabledStatus() {
      return cr.sendWithPromise('easyUnlockGetEnabledStatus');
    }

    /** @override */
    getTurnOffFlowStatus() {
      return cr.sendWithPromise('easyUnlockGetTurnOffFlowStatus');
    }

    /** @override */
    startTurnOffFlow() {
      chrome.send('easyUnlockStartTurnOffFlow');
    }

    /** @override */
    cancelTurnOffFlow() {
      chrome.send('easyUnlockCancelTurnOffFlow');
    }
  }

  // The singleton instance_ is replaced with a test version of this wrapper
  // during testing.
  cr.addSingletonGetter(EasyUnlockBrowserProxyImpl);

  return {
    EasyUnlockBrowserProxy: EasyUnlockBrowserProxy,
    EasyUnlockBrowserProxyImpl: EasyUnlockBrowserProxyImpl,
  };
});
