Source: parsers/SceneLayoutParser.js

import { Version } from '@uino/base-thing';
import { Utils } from '../common/Utils';
import { SceneObjectParser } from './SceneObjectParser';

const __ = {
	private: Symbol('private'),
}

/**
 * @class SceneLayoutParser
 * The scene layout parser.
 * @memberof THING
 */
class SceneLayoutParser {

	/**
	 * The parser of objects scene in layout mode.
	 */
	constructor() {
		this[__.private] = {};
		let _private = this[__.private];

		_private.version = new Version('1.0.0');

		_private.objectParser = new SceneObjectParser();

	}

	// #region Private Functions

	_onUpdateCreateOptions(owner, classType, options) {
		let extras = options['extras'] || options['external'];
		if (!extras) {
			return;
		}

		let parentId = extras['parent'];
		if (Utils.isNull(parentId)) {
			return;
		}

		// Find parent object by UUID
		let parent = owner.find(`[uuid=${parentId}]`, { includeSelf: true });
		if (parent) {
			options['parent'] = parent;
		}
	}

	// #endregion

	clear() {
		let _private = this[__.private];

		_private.objectParser.clear();
	}

	parse(data, load, progress, error, options) {
		let _private = this[__.private];

		options['onUpdateCreateOptions'] = options['onUpdateCreateOptions'] || this._onUpdateCreateOptions;

		_private.objectParser.parse(data, load, progress, error, options);
	}

	getVersion() {
		let _private = this[__.private];

		return _private.version;
	}

}

export { SceneLayoutParser }