<?php

namespace MintyPHP\Service\Audit;

use MintyPHP\Repository\User\UserReadRepositoryInterface;

class AuditMetadataEnricher
{
    public function __construct(
        private readonly UserReadRepositoryInterface $userReadRepository
    ) {
    }

    /**
     * Resolve audit user IDs on an entity into display labels and UUIDs.
     *
     * For each field name in $fields the method reads `$entity[$field]` as a
     * user ID, looks up the user record, and sets `{$field}_label` (full name
     * with email fallback) and `{$field}_uuid` on the entity.
     *
     * @param array<string,mixed> $entity The entity array (modified in place).
     * @param list<string>        $fields Audit field names to resolve (e.g. 'created_by', 'modified_by').
     */
    public function enrich(array &$entity, array $fields = ['created_by', 'modified_by']): void
    {
        foreach ($fields as $field) {
            $userId = (int) ($entity[$field] ?? 0);
            if ($userId <= 0) {
                continue;
            }

            $user = $this->userReadRepository->find($userId);
            if (!$user) {
                continue;
            }

            $name = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? ''));
            $entity[$field . '_label'] = $name !== '' ? $name : ($user['email'] ?? '');
            $entity[$field . '_uuid'] = $user['uuid'] ?? null;
        }
    }
}
