import { Utils } from '../common/Utils';
import { BasePlanePoints } from './BasePlanePoints';

let _originalQuat = [0, 0, 0, 1];

/**
 * PlaneRegion - 平面区域
 * 
 * 可自定义坐标的平面物体(所有点位均在同一平面),支持内洞和样式。
 * 
 * @class PlaneRegion
 * @memberof THING
 * @extends THING.BasePlanePoints
 * @public
 * 
 * @example
 * const region = new THING.PlaneRegion({
 *   points: [[0, 0, 0], [5, 0, 0], [5, 0, 5], [0, 0, 5]],
 *   style: { color: '#4488ff' },
 * });
 */
class PlaneRegion extends BasePlanePoints {

	static defaultTagArray = ['Region'];

	/**
	 * 可自定义坐标的平面物体(所有点位均在同一平面)
	 * @param {object} param 初始参数列表
	 * @param {number[][]} param.points 世界坐标系下(3D)区域外轮廓坐标
	 * @param {number[][][]} param.holes 世界坐标系下(3D)区域内空洞的坐标(支持多个空洞)
	 * @param {number[][]} param.selfPoints 自身坐标系下(3D)区域外轮廓坐标
	 * @param {number[][][]} param.selfHoles 自身坐标系下(3D)区域空洞坐标
	 * @param {number[][]} param.selfPlanePoints 自身平面坐标系下(2D)区域外轮廓坐标
	 * @param {number[][][]} param.selfPlaneHoles 自身平面坐标系下(2D)区域空洞坐标
	 * @param {object} param.style 物体样式
	 * @constructor
	 * @public
	 */
	constructor(param = {}) {
		super(param);
	}

	// #region Overrides

	onCreateBodyNode(param) {
		const node = Utils.createObject('ExtrudeShape', { app: this.app });
		node.setQuaternion(_originalQuat);
		// We will show region as very very thin plane
		node.setHeight(Number.MIN_VALUE);
		return node;
	}

	// #endregion

	// #region Accessor

	// #endregion

	/**
	 * Check whether it's PlaneRegion type or inherit from it.
	 * @type {boolean}
	 */
	get isPlaneRegion() {
		return true;
	}

}

export { PlaneRegion }