<?php

declare(strict_types=1);

namespace App\Services\Baselines\SnapshotRendering;

final readonly class RenderedSnapshotItem
{
    /**
     * @param  array<int, RenderedAttribute>  $structuredAttributes
     */
    public function __construct(
        public string $label,
        public string $typeLabel,
        public string $identityHint,
        public string $referenceStatus,
        public FidelityState $fidelity,
        public GapSummary $gapSummary,
        public ?string $observedAt,
        public ?string $sourceReference,
        public array $structuredAttributes,
    ) {}

    /**
     * @return array{
     *   label: string,
     *   typeLabel: string,
     *   identityHint: string,
     *   referenceStatus: string,
     *   fidelity: string,
     *   gapSummary: array{count: int, has_gaps: bool, messages: list<string>, badge_state: string},
     *   observedAt: ?string,
     *   sourceReference: ?string,
     *   structuredAttributes: list<array{label: string, value: string, priority: string}>
     * }
     */
    public function toArray(): array
    {
        return [
            'label' => $this->label,
            'typeLabel' => $this->typeLabel,
            'identityHint' => $this->identityHint,
            'referenceStatus' => $this->referenceStatus,
            'fidelity' => $this->fidelity->value,
            'gapSummary' => $this->gapSummary->toArray(),
            'observedAt' => $this->observedAt,
            'sourceReference' => $this->sourceReference,
            'structuredAttributes' => array_map(
                static fn (RenderedAttribute $attribute): array => $attribute->toArray(),
                $this->structuredAttributes,
            ),
        ];
    }
}
