<?php

class LazyFileReaderManager
{

	/** @var array<string, string> */
	private array $readers = [
		'neon' => NeonFileReader::class,
		'xml' => XmlFileReader::class,
		'yaml' => YamlFileReader::class,
	];

	/** @var array<string, FileReader> */
	private array $instances = [];

	public function get(string $suffix): FileReader
	{
		if (isset($this->instances[$suffix])) {
			return $this->instances[$suffix];
		}

		if (!isset($this->readers[$suffix])) {
			throw new InvalidArgumentException(sprintf(
				'File reader for suffix `%s` does not exist.',
				$suffix
			));
		}

		return $this->instances[$suffix] = new $suffix();
	}

	public function add(string $suffix, FileReader $reader): void
	{
		$this->instances[$suffix] = $reader;
	}

}