//@include lib_Class.js

/**
 * Subscription utilities
 *
 * @author PZ, ELO Digital Office GmbH
 * @version 1.03.000
 *
 * @eloix
 */
sol.define("sol.common.ix.SubscriptionUtils", {
  singleton: true,

  /**
   * Retrieve the feed guid of an element
   * @param {String} objId
   * @return {String}
   */
  getFeedGuid: function (objId) {
    var fai, fr, feed;

    fai = FindActionsInfo();
    fai.objId = objId;
    fr = ixConnect.feedService.findFirstActions(fai, 1, ActionC.mbMin);

    feed = (fr && fr.actions && fr.actions.length > 0) ? fr.feeds.get(fr.actions[0].feedGuid) : null;

    return (feed) ? feed.guid : null;
  },

  /**
   * Checks, if the user has subscribed to an elements feed.
   * @param {String} objId
   * @return {Boolean}
   */
  hasSubscription: function (objId) {
    var fai, fr, feed;

    fai = FindActionsInfo();
    fai.objId = objId;
    fai.findSubscriptions = true;
    fr = ixConnect.feedService.findFirstActions(fai, 1, ActionC.mbMin);

    return fr && fr.subscriptions && (fr.subscriptions.size() > 0);
  },

  /**
   * Subscribe to a feed.
   * @param {String} feedGuid
   */
  subscribe: function (feedGuid) {
    var subscription;
    subscription = ixConnect.ix().createSubscription(feedGuid);
    ixConnect.ix().checkinSubscription(subscription, SubscriptionC.mbAll);
  },

  /**
   * Subscribe to an elements feed.
   * @param {String} objId
   */
  subscribeToElement: function (objId) {
    var me = this;
    me.subscribe(me.getFeedGuid(objId));
  },

  /**
   * Unsubscribe from a feed.
   * @param {String} feedGuid
   */
  unsubscribe: function (feedGuid) {
    var subscription;
    subscription = ixConnect.ix().createSubscription(feedGuid);
    ixConnect.ix().deleteSubscription(subscription);
  },

  /**
   * Unsubscribe from an elements feed.
   * @param {String} objId
   */
  unsubscribeFromElement: function (objId) {
    var me = this;
    me.unsubscribe(me.getFeedGuid(objId));
  }

});