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

solrAdminApp.controller('CollectionOverviewController',
function($scope, $routeParams, Collections, Constants) {
  $scope.resetMenu("collection-overview", Constants.IS_COLLECTION_PAGE);

  $scope.refresh = function() {
    Collections.status({}, function(data) {
      $scope.selectedCollection = data.cluster.collections[$routeParams.core];
      $scope.selectedCollection.name = $routeParams.core;
      $scope.rootUrl = Constants.ROOT_URL;
    });
  };

  $scope.showReplica = function(replica) {
    replica.show = !replica.show;
  }

  $scope.hideShard = function(shard) {
    shard.hide = !shard.hide;
  }

  $scope.refresh();
});
