<?php

// phpcs:disable Wptopr.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
namespace Wptopr\WP\SEO\Schema_Aggregator\Domain;

/**
 * Type-safe collection for Schema_Piece objects.
 */
class Schema_Piece_Collection {

	/**
	 * The schema pieces.
	 *
	 * @var array<Schema_Piece>
	 */
	private $pieces = [];

	/**
	 * Class constructor.
	 *
	 * @param array<Schema_Piece> $pieces Optional array of Schema_Piece objects.
	 */
	public function __construct( array $pieces = [] ) {
		foreach ( $pieces as $piece ) {
			$this->add( $piece );
		}
	}

	/**
	 * Adds a schema piece to the collection.
	 *
	 * @param Schema_Piece $piece The schema piece to add.
	 *
	 * @return void
	 */
	public function add( Schema_Piece $piece ): void {
		$this->pieces[] = $piece;
	}

	/**
	 * Gets all schema pieces as an array.
	 *
	 * @return array<Schema_Piece> The schema pieces.
	 */
	public function to_array(): array {
		return $this->pieces;
	}
}
