/**
 * Creates a PDF label from a template.
 *
 * @eloas
 * @requires sol.common.RepoUtils
 * @requires sol.common.Template
 * @requires sol.common.TranslateTerms
 * @requires sol.common.ObjectFormatter.TemplateSord
 * @requires sol.common.as.DocumentGenerator
 * @requires sol.common.as.ActionBase
 */
sol.define("sol.contract.as.actions.CreateLabel", {
  extend: "sol.common.as.ActionBase",

  /**
   * @cfg {String} targetId The target for the resulting document
   */

  /**
   * @cfg {String} templateId The template to generate the document from
   */

  requiredProperty: ["targetId", "templateId"],

  initialize: function (config) {
    var me = this;
    me.$super("sol.common.as.ActionBase", "initialize", [config]);
    me.config = sol.create("sol.common.Config", { compose: "/contract/Configuration/contract.config" }).config;
    sol.common.TranslateTerms.require("sol.contract.action.createContractLabel");
  },

  getName: function () {
    return "CreateLabel";
  },

  process: function () {
    var me = this,
        name = sol.create("sol.common.Template", { source: me.config.contractLabel.defaultName }).applySord(me.targetId),
        generator, result;

    if (!me.isInContract()) {
      me.addErrorEvent("sol.contract.msg.noContractFound", null, null, ixConnect.loginResult.clientInfo.language);
      return;
    }

    generator = sol.create("sol.common.as.DocumentGenerator", {
      name: name,
      dataCollector: "RF_sol_common_service_ParentDataCollector",
      renderer: "sol.common.as.renderer.Fop",
      collectorConfig: {
        objId: me.targetId,
        returnDataDefinition: true,
        allMapFields: true
      },
      rendererConfig: {
        targetId: me.targetId,
        templateId: me.templateId,
        maskId: me.config.contractLabel.maskId || "Contract Document"
      }
    });

    result = generator.process();

    if (result.objId) {
      me.addGotoIdEvent(result.objId);
    }
  },

  /**
   * @private
   * Checks, if the selected element is inside (or is by itself) a contract.
   * @return {Boolean}
   */
  isInContract: function () {
    var me = this,
        contract = sol.common.RepoUtils.findInHierarchy(me.targetId, { sordTypeNames: ["sol.Contract"] });
    return sol.common.SordUtils.isSord(contract);
  }

});