<?php declare(strict_types=1);

namespace App\Engine\AdministratorUser;

final readonly class WebauthnCredentialProvider
{

    public function __construct(
        private \App\Engine\Admin\Auth\WebauthnCredentialRepository $webauthnCredentialRepository,
    ) {
    }

    public function provideAllCredentialsOrderedByCreationForAdministration(string $adminUserUuid): array
    {
        /** @var array<\App\Engine\Admin\Auth\WebauthnCredential> $credentials */
        $credentials = $this->webauthnCredentialRepository->createQueryBuilder("wc")
            ->where("wc.userHandle = :userHandle")
            ->setParameter('userHandle', $adminUserUuid)
            ->addOrderBy("wc.createdAt", "ASC")
            ->getQuery()
            ->execute();

        $result = [];
        foreach ($credentials as $credential) {
            $resultCredential = new \App\Engine\Inertia\Admin\ViewModels\Passkeys\RegisteredPasskeyViewModel();
            $resultCredential->id = $credential->getId();
            $resultCredential->createdAtTimestamp = $credential->getCreatedAt()->getTimestamp();
            $resultCredential->clientIdentifier = \App\Engine\Admin\Auth\WebauthnCredentialAdministratorUserEntityRepository::provideClientHashFromUserEntityId($credential->getId());
            $result[] = $resultCredential;
        }

        return $result;
    }

}