
/*
 * Copyright 2017-present Open Networking Foundation

 * 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';

  angular.module('xos.helpers')
  /**
  * @ngdoc service
  * @name xos.helpers.SlicesPlus
  * @description Angular resource to fetch /api/utility/slicesplus/
  * This is a read-only API and only the `query` method is currently supported.
  **/
  .service('SlicesPlus', function($http, $q){
    this.query = (params) => {
      let deferred = $q.defer();

      $http.get('/api/utility/slicesplus/', {params: params})
      .then(res => {
        deferred.resolve(res.data);
      })
      .catch(res => {
        deferred.reject(res.data);
      });

      return {$promise: deferred.promise};
    }

    this.get = (id, params) => {
      let deferred = $q.defer();

      $http.get(`/api/utility/slicesplus/${id}`, {params: params})
      .then(res => {
        deferred.resolve(res.data);
      })
      .catch(res => {
        deferred.reject(res.data);
      });
      return {$promise: deferred.promise};
      
    }
  })
})();
