import { Node } from './Node.js';

class AttributeNode extends Node {

	constructor( name, type ) {

		super( type );

		this.name = name;

	}

	getAttributeType( builder ) {

		return typeof this.type === 'number' ? builder.getConstructorFromLength( this.type ) : this.type;

	}

	getType( builder ) {

		const type = this.getAttributeType( builder );

		return builder.getTypeByFormat( type );

	}

	generate( builder, output ) {

		const type = this.getAttributeType( builder );

		const attribute = builder.getAttribute( this.name, type ),
			name = builder.isShader( 'vertex' ) ? this.name : attribute.varying.name;

		return builder.format( name, this.getType( builder ), output );

	}

	copy( source ) {

		super.copy( source );

		this.type = source.type;

		return this;

	}

	toJSON( meta ) {

		let data = this.getJSONNode( meta );

		if ( ! data ) {

			data = this.createJSONNode( meta );

			data.type = this.type;

		}

		return data;

	}

}

AttributeNode.prototype.nodeType = 'Attribute';

export { AttributeNode };