<?php

declare(strict_types=1);

namespace App\Service\Utils;

class ObjectUtils
{
    /**
     * Créé un hash à partir d'un objet
     * (après l'avoir trié selon ses clés, et convertit en json sans espace).
     *
     * @param object|array<mixed> $instance
     */
    public static function hash(object|array $instance, string $algorithm = 'sha256'): string
    {
        // Convertit l'objet en tableau associatif
        $array = (array) $instance;
        // Puis trie l'objet selon ses clés, encode en json, et hash
        ksort($array);
        $json = json_encode((object) $array);

        return hash($algorithm, $json);
    }
}
