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

cr.define('print_preview', function() {
  /**
   * Helper functions for a select with timeout. Implemented by select settings
   * sections, so that the preview does not immediately begin generating and
   * freeze the dropdown when the value is changed.
   * Assumes that the elements implementing this behavior have no more than one
   * select element.
   * @polymerBehavior
   */
  const SelectBehavior = {
    properties: {
      selectedValue: {
        type: String,
        observer: 'onSelectedValueChange_',
      },
    },

    /**
     * @param {string} current
     * @param {?string} previous
     * @private
     */
    onSelectedValueChange_: function(current, previous) {
      // Don't trigger an extra preview request at startup.
      if (previous === undefined) {
        return;
      }

      this.debounce('select-change', () => {
        this.onProcessSelectChange(this.selectedValue);

        // For testing only
        this.fire('process-select-change');
      }, 100);
    },

    /**
     * Should be overridden by elements using this behavior to receive select
     * value updates.
     * @param {string} value The new select value to process.
     */
    onProcessSelectChange: function(value) {},
  };

  return {SelectBehavior: SelectBehavior};
});
