<?php
include "09.22.php";
include "09.23.php";
include "09.52.php";
class ObjectAssembler
{
	private array $components = [];
	public function __construct(string $conf)
	{
		$this->configure($conf);
	}
	private function configure(string $conf): void
	{
		$data = simplexml_load_file($conf);
		foreach ($data->class as $class) {
			$name = (string)$class['name'];
			$resolvedname = $name;
			if (isset($class->instance)) {
				if (isset($class->instance[0]['inst'])) {
					$resolvedname = (string)$class->instance[0]['inst'];
				}
			}
			$this->components[$name] = function() use ($resolvedname) {
				$rclass = new \ReflectionClass($resolvedname);
				return $rclass->newInstance();
			};
		}
	}
	public function getComponent(string $class): object
	{
		if (isset($this->components[$class])) {
			$Inst = $this->components[$class]();
		} else {
			$rclass = new \ReflectionClass($class);
			$inst = $rclass->newInstance();
		}
		return $Inst;
	}
}
$assembler = new ObjectAssembler("09.53.xml");
$encoder = $assembler->getComponent(ApptEncoder::class);
$apptmaker = new AppointmentMaker2($encoder);
$out = $apptmaker->makeAppointment();
print $out;
