<?php

declare(strict_types=1);

/*
 * Chill is a software for social workers
 *
 * For the full copyright and license information, please view
 * the LICENSE file that was distributed with this source code.
 */

namespace Chill\PersonBundle\PersonIdentifier;

use Chill\PersonBundle\Entity\Identifier\PersonIdentifier;
use Chill\PersonBundle\Entity\Identifier\PersonIdentifierDefinition;
use Symfony\Component\Form\FormBuilderInterface;

readonly class PersonIdentifierWorker
{
    public function __construct(
        private PersonIdentifierEngineInterface $identifierEngine,
        private PersonIdentifierDefinition $definition,
    ) {}

    public function getIdentifierEngine(): PersonIdentifierEngineInterface
    {
        return $this->identifierEngine;
    }

    public function getDefinition(): PersonIdentifierDefinition
    {
        return $this->definition;
    }

    public function buildForm(FormBuilderInterface $builder): void
    {
        $this->identifierEngine->buildForm($builder, $this->definition);
    }

    public function canonicalizeValue(array $value): ?string
    {
        return $this->identifierEngine->canonicalizeValue($value, $this->definition);
    }

    public function renderAsString(?PersonIdentifier $identifier): string
    {
        return $this->identifierEngine->renderAsString($identifier, $this->definition);
    }

    /**
     * Return true if the identifier must be considered as empty.
     */
    public function isEmpty(PersonIdentifier $identifier): bool
    {
        return $this->identifierEngine->isEmpty($identifier);
    }

    /**
     * @return list<IdentifierViolationDTO>
     */
    public function validate(PersonIdentifier $identifier, PersonIdentifierDefinition $definition): array
    {
        return $this->identifierEngine->validate($identifier, $definition);
    }

    public function getDefaultValue(): array
    {
        return $this->identifierEngine->getDefaultValue($this->definition);
    }
}
