<?php

namespace App\Modules\{{ module }}\Application\Update;

{{ imports }}

final class Update{{ module }}Handler implements CommandHandler
{
    public function __construct(
        private {{ module }}Indexer $indexer,
        private {{ module }}Updater $updater,
    ) {}

    private function conditionalSet($condition, AggregateRoot &$aggregateRoot, string $setter, string $object): void
    {
        if (isset($condition)) {
            $aggregateRoot->$setter(new $object($condition));
        }
    }

    public function __invoke(Update{{ module }}Command $command): void
    {
        /** @var {{ module }} $model */
        $model = $this->indexer->__invoke(new Id{{ module }}($command->id));

        $set = [
{{ sets }}
        ];

        foreach ($set as $value) {
            $this->conditionalSet($value[0], $value[1], $value[2], $value[3]);
        }

        $this->updater->__invoke($model, $command->idAdmin);
    }
}
