/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

var App = require('app');
var batchUtils = require('utils/batch_scheduled_requests');

App.MainServiceInfoConfigsView = Em.View.extend({

  templateName: require('templates/main/service/info/configs'),

  didInsertElement: function () {
    var self = this;
    App.router.get('mainController').isLoading.call(App.router.get('clusterController'), 'isConfigsPropertiesLoaded').done(function () {
      self.get('controller').loadStep();
    });
  },

  willDestroyElement: function() {
    this.get('controller').clearStep();
  },

  /**
   * Number of components that should be restarted
   * @type {number}
   */
  componentsCount: null,

  /**
   * Number of hosts with components that should be restarted
   * @type {number}
   */
  hostsCount: null,

  /**
   * @type {boolean}
   */
  isStopCommand: true,

  /**
   * @method updateComponentInformation
   */
  updateComponentInformation: function() {
    var hc = this.get('controller.content.restartRequiredHostsAndComponents');
    var componentsCount = 0;
    var hosts = Em.keys(hc);
    hosts.forEach(function (host) {
      componentsCount += hc[host].length;
    });
    this.setProperties({
      componentsCount: componentsCount,
      hostsCount: hosts.length
    });
  }.observes('controller.content.restartRequiredHostsAndComponents'),

  /**
   * @type {string}
   */
  rollingRestartSlaveComponentName: function() {
    return batchUtils.getRollingRestartComponentName(this.get('controller.content.serviceName'));
  }.property('controller.content.serviceName'),

  /**
   * @type {string}
   */
  rollingRestartActionName : function() {
    var componentName = this.get('rollingRestartSlaveComponentName');
    return componentName ? Em.I18n.t('rollingrestart.dialog.title').format(App.format.role(componentName)) : '';
  }.property('rollingRestartSlaveComponentName'),

  /**
   * When some config has dependencies and `.dependencies-info-bar` should be shown and should be placed sticky to top
   * @method onHasChangedDependenciesUpdated
   */
  onHasChangedDependenciesUpdated: function () {
    if (this.get('controller.hasChangedDependencies')) {
      Em.run.next(function () {
        $(".dependencies-info-bar-wrapper").stick_in_parent({parent: '#serviceConfig', offset_top: 60});
        Em.run.next(function () {
          $(window).scrollTop(window.scrollY + 1); // '.dependencies-info-bar-wrapper' position should be recalculated
        });
      });
    }
    else {
      $(".dependencies-info-bar-wrapper").trigger("sticky_kit:detach");
    }
  }.observes('controller.hasChangedDependencies')

});
