// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
(function() {
  'use strict';

  Polymer({
    is: 'gr-change-table-editor',

    properties: {
      displayedColumns: {
        type: Array,
        notify: true,
      },
      showNumber: {
        type: Boolean,
        notify: true,
      },
    },

    behaviors: [
      Gerrit.ChangeTableBehavior,
    ],

    _getButtonText(isShown) {
      return isShown ? 'Hide' : 'Show';
    },

    _updateDisplayedColumns(displayedColumns, name, checked) {
      if (!checked) {
        return displayedColumns.filter(column => {
          return name.toLowerCase() !== column.toLowerCase();
        });
      } else {
        return displayedColumns.concat([name]);
      }
    },

    /**
     * Handles tap on either the checkbox itself or the surrounding table cell.
     */
    _handleTargetTap(e) {
      let checkbox = Polymer.dom(e.target).querySelector('input');
      if (checkbox) {
        checkbox.click();
      } else {
        // The target is the checkbox itself.
        checkbox = Polymer.dom(e).rootTarget;
      }

      if (checkbox.name === 'number') {
        this.showNumber = checkbox.checked;
        return;
      }

      this.set('displayedColumns',
          this._updateDisplayedColumns(
              this.displayedColumns, checkbox.name, checkbox.checked));
    },
  });
})();
