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

	//region Properties: Private

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

	//endregion

	//region Properties: Public

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

	/**
  * Iframe id.
  * @type {String}
  */
	id: null,

	/**
  * Iframe source.
  * @type {String}
  */
	src: null,

	/**
  * Iframe css classes.
  * @type {Array}
  */
	wrapClass: ["t-iframe"],

	//endregion

	//region Methods: Private

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

	//endregion

	//region Methods: Protected

	/**
  * @inheritdoc Terrasoft.Component#init
  * @override
  */
	init: function () {
		this.callParent(arguments);
		var selectors = this.selectors = this.selectors || {};
		selectors.wrapEl = selectors.wrapEl || "#" + this.id;
	},

	/**
  * Writes html to iframe.
  * @protected
  */
	writeHTMLToIframe: function () {
		var iframe = this.getWrapEl();
		var iframeDocument = iframe.dom.contentWindow.document;
		iframeDocument.open();
		iframeDocument.write(this.iframeContent);
		iframeDocument.close();
	},

	/**
  * @inheritdoc Terrasoft.Component#onAfterRender
  * @override
  */
	onAfterRender: function () {
		this.callParent(arguments);
		this.writeHTMLToIframe();
	},

	/**
  * @inheritdoc Terrasoft.Component#onAfterReRender
  * @override
  */
	onAfterReRender: function () {
		this.callParent(arguments);
		this.writeHTMLToIframe();
	},

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

	/**
  * @inheritdoc Terrasoft.BaseContentElement#getTplData
  * @override
  */
	getTplData: function () {
		var tplData = this.callParent(arguments);
		return Ext.apply(tplData, {
			iframeContent: this.iframeContent,
			src: this.src,
			wrapClass: this.wrapClass
		});
	}

	//endregion
});