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

angular.module('zeppelinWebApp').controller('NotebookRepositoryCtrl', NotebookRepositoryCtrl);

function NotebookRepositoryCtrl($http, baseUrlSrv, ngToast) {
  'ngInject';

  let vm = this;
  vm.notebookRepos = [];
  vm.showDropdownSelected = showDropdownSelected;
  vm.saveNotebookRepo = saveNotebookRepo;

  _init();

  // Public functions

  function saveNotebookRepo(valueform, repo, data) {
    console.log('data %o', data);
    $http.put(baseUrlSrv.getRestApiBase() + '/notebook-repositories', {
      'name': repo.className,
      'settings': data,
    }).success(function(data) {
      let index = _.findIndex(vm.notebookRepos, {'className': repo.className});
      if (index >= 0) {
        vm.notebookRepos[index] = data.body;
        console.log('repos %o, data %o', vm.notebookRepos, data.body);
      }
      valueform.$show();
    }).error(function() {
      ngToast.danger({
        content: 'We couldn\'t save that NotebookRepo\'s settings',
        verticalPosition: 'bottom',
        timeout: '3000',
      });
      valueform.$show();
    });

    return 'manual';
  }

  function showDropdownSelected(setting) {
    let index = _.findIndex(setting.value, {'value': setting.selected});
    if (index < 0) {
      return 'No value';
    } else {
      return setting.value[index].name;
    }
  }

  // Private functions

  function _getInterpreterSettings() {
    $http.get(baseUrlSrv.getRestApiBase() + '/notebook-repositories')
      .success(function(data, status, headers, config) {
        vm.notebookRepos = data.body;
      }).error(function(data, status, headers, config) {
        if (status === 401) {
          ngToast.danger({
            content: 'You don\'t have permission on this page',
            verticalPosition: 'bottom',
            timeout: '3000',
          });
          setTimeout(function() {
            window.location = baseUrlSrv.getBase();
          }, 3000);
        }
        console.log('Error %o %o', status, data.message);
      });
  }

  function _init() {
    _getInterpreterSettings();
  }
}
