<?php

declare(strict_types=1);

namespace App\Shared\Domain\Contract;

use Symfony\Component\Security\Core\User\UserInterface;

/**
 * Contrat lu par le TimestampableBlamableSubscriber.
 *
 * Toute entite qui l'implemente voit ses colonnes `created_by` / `updated_by`
 * remplies automatiquement avec l'utilisateur authentifie (ou laissees a null
 * hors contexte HTTP : CLI, cron, migration).
 *
 * Le type-hint cible `Symfony\Component\Security\Core\User\UserInterface`
 * (deja implementee par App\Module\Core\Domain\Entity\User) pour eviter de
 * coupler Shared a Module/Core. La classe concrete est resolue par Doctrine
 * via `resolve_target_entities` (cf. config/packages/doctrine.yaml).
 */
interface BlamableInterface
{
    public function getCreatedBy(): ?UserInterface;

    public function setCreatedBy(?UserInterface $user): void;

    public function getUpdatedBy(): ?UserInterface;

    public function setUpdatedBy(?UserInterface $user): void;
}
