import {Object3D} from 'three';
import {DisplayNodeController} from '../../utils/DisplayNodeController';
import {ObjChildrenDisplayController} from './ObjChildrenDisplayController';
import {TesselationParamsObjNode} from './TesselationParams';
import {CoreGroup} from '../../../../core/geometry/Group';
import {Poly} from '../../../Poly';
import {BaseSopNodeType} from '../../sop/_Base';

interface BaseObjNodeClassWithDisplayNode extends TesselationParamsObjNode {
	displayNodeController: DisplayNodeController;
}

export class ChildrenDisplayControllerSpecialized extends ObjChildrenDisplayController {
	constructor(protected override node: BaseObjNodeClassWithDisplayNode) {
		super(node);
	}

	override _addSpecializedObjects(displayNode: BaseSopNodeType, coreGroup: CoreGroup, newObjects: Object3D[]) {
		const _newObjectsAreDifferent = Poly.specializedChildren.runHooks(
			displayNode,
			coreGroup,
			newObjects,
			this.node.pv
		);
		if (_newObjectsAreDifferent) {
			this._newObjectsAreDifferent = _newObjectsAreDifferent;
		}
	}
}
