/**
 * HtmlControl class for user layout creation.
 */
Ext.define("Terrasoft.controls.HtmlControl", {
	extend: "Terrasoft.Component",
	alternateClassName: "Terrasoft.HtmlControl",

	//region Properties: Private

	/**
  * Shared template of control.
  * @private
  * @override
  * @type {String[]}
  */
	tpl: [
	/*jshint quotmark:true */
	'<div id="{id}">', '{htmlContent}', '</div>'
	/*jshint quotmark:false */
	],

	//endregion

	//region Properties: Public

	/**
  * User's html layout.
  * @type {String}
  */
	htmlContent: null,

	//endregion

	//region Methods: Private

	/**
  * Set new user html layout.
  * @private
  * @param {String} value.
  */
	setHtmlContent: function (value) {
		if (this.htmlContent !== value) {
			this.htmlContent = value;
			this.safeRerender();
		}
	},

	//endregion

	//region Methods: Protected

	/**
  * Initialize component.
  * @protected
  * @override
  */
	init: function () {
		this.callParent(arguments);
		var selectors = this.selectors = this.selectors || {};
		var wrapSelector = selectors.wrapEl;
		var html = this.html;
		if (!wrapSelector && !html) {
			var id = this.id;
			selectors.wrapEl = "#" + id;
		}
	},

	/**
  * @inheritdoc Terrasoft.Component#getBindConfig.
  * @protected
  * @override
  */
	getBindConfig: function () {
		var bindConfig = this.callParent(arguments);
		var htmlControlBindConfig = {
			htmlContent: {
				changeMethod: "setHtmlContent"
			}
		};
		Ext.apply(htmlControlBindConfig, bindConfig);
		return htmlControlBindConfig;
	},

	/**
  * @inheritdoc Terrasoft.BaseContentElement#getTplData
  * @protected
  * @override
  */
	getTplData: function () {
		var tplData = this.callParent(arguments);
		tplData.htmlContent = this.htmlContent;
		return tplData;
	}

	//endregion
});