import stampit from 'stampit';
import {Meta, Model} from './base';
import {BaseQuerySet, Get, List} from '../querySet';
const SubscriptionQuerySet = stampit().compose(
  BaseQuerySet,
  Get,
  List
).methods({
  cancel(properties = {}, payload = {}) {
    this.properties = _.assign({}, this.properties, properties);
    this.method = 'POST';
    this.payload = {payload}
    this.endpoint = 'cancel';
    return this;
  }
});
const SubscriptionMeta = Meta({
  name: 'subscription',
  pluralName: 'subscriptions',
  endpoints: {
    'detail': {
      'methods': ['get'],
      'path': '/v1.1/billing/subscriptions/{id}/'
    },
    'list': {
      'methods': ['get'],
      'path': '/v1.1/billing/subscriptions/'
    },
    'cancel': {
      'methods': ['post'],
      'path': '/v1.1/billing/subscriptions/{id}/cancel/'
    }
  }
});
/**
 * OO wrapper around Subscription.
 * @constructor
 * @type {Subscription}
 * @property {String} end
 * @property {String} commitment
 * @property {String} start
 * @property {String} pricing
 * @property {Number} id
 * @property {String} plan
 */
const Subscription = stampit()
  .compose(Model)
  .setQuerySet(SubscriptionQuerySet)
  .setMeta(SubscriptionMeta)
  .methods({
    cancel(payload = {}) {
      const meta = this.getMeta();
      const path = meta.resolveEndpointPath('cancel', this);
      return this.makeRequest('POST', path, {payload});
    }
  });
export default Subscription;