# Source: src/js/models/bookkeeper/Subscription.js

    /* global define */
    define(["jquery",
            "underscore",
            "backbone"],
      function($, _, Backbone) {
        /**
         * @classdesc A Subscription Model represents a single instance of a Subscription object from the
         * DataONE Bookkeeper data model.
         * Subscriptions represent a Product that has been ordered by a Customer
         * and is paid for on a recurring basis or is in a free trial period.
         * See https://github.com/DataONEorg/bookkeeper for documentation on the
         * DataONE Bookkeeper service and data model.
         * @classcategory Models/Bookkeeper
         * @class Subscription
         * @name Subscription
         * @since 2.14.0
         * @constructor
        */
        var Subscription = Backbone.Model.extend(
          /** @lends Subscription.prototype */ {

          /**
          * The name of this type of model
          * @type {string}
          */
          type: "Subscription",

          /**
          * Default attributes for Subscription models
          * @name Subscription#defaults
          * @type {Object}
          * @property {string} id  The unique identifier of this Subscription, from Bookkeeper
          * @property {string} object The name of this type of Bookkeeper object, which will always be "subscription"
          * @property {number} canceledAt  The timestamp of the date that this Subscription was canceled
          * @property {string} collectionMethod  The method of payment collection for this Subscription, which is a string from a controlled vocabulary from Bookkeeper
          * @property {number} created  The timestamp of the date that this Subscription was created
          * @property {number} customerId  The identifier of the Customer that is associated with this Subscription
          * @property {Object} metadata  Arbitrary metadata about this Subscription. These values should be parsed and set on this model (TODO)
          * @property {number} productId  The identifier of a Product in this Subscription
          * @property {number} quantity  The number of Subscriptions
          * @property {number} startDate  The timestamp of the date that this Subscription was started
          * @property {string} status  The status of this Subscription, which is taken from a controlled vocabulary set on this model (statusOptions)
          * @property {string[]} statusOptions  The controlled vocabulary from which the `status` value can be from
          * @property {number} trialEnd  The timestamp of the date that this free trial Subscription ends
          * @property {number} trialStart  The timestamp of the date that this free trial Subscription starts
          */
          defaults: function(){
            return {
              id: null,
              object: "subscription",
              canceledAt: null,
              collectionMethod: "send_invoice",
              created: null,
              customerId: null,
              metadata: {},
              productId: null,
              quantity: 0,
              startDate: null,
              status: null,
              statusOptions: ["trialing", "active", "past_due", "canceled", "unpaid", "incomplete_expired", "incomplete"],
              trialEnd: null,
              trialStart: null
            }
          },

          /**
          *
          * Returns true if this Subscription is in a free trial period.
          * @returns {boolean}
          */
          isTrialing: function(){
            return this.get("status") == "trialing";
          }

      });

      return Subscription;
    });