<?php

declare(strict_types=1);

namespace App\Support\Ui\GovernanceArtifactTruth;

use App\Support\Badges\BadgeDomain;
use App\Support\Badges\BadgeSpec;

final readonly class ArtifactTruthDimension
{
    public function __construct(
        public string $axis,
        public string $state,
        public string $label,
        public string $classification,
        public ?BadgeDomain $badgeDomain = null,
        public ?string $badgeState = null,
    ) {}

    public function isPrimary(): bool
    {
        return $this->classification === 'primary';
    }

    public function isDiagnostic(): bool
    {
        return $this->classification === 'diagnostic';
    }

    public function badgeSpec(): ?BadgeSpec
    {
        if (! $this->badgeDomain instanceof BadgeDomain || ! is_string($this->badgeState) || trim($this->badgeState) === '') {
            return null;
        }

        return \App\Support\Badges\BadgeCatalog::spec($this->badgeDomain, $this->badgeState);
    }

    /**
     * @return array{
     *     axis: string,
     *     state: string,
     *     label: string,
     *     classification: string,
     *     badgeDomain: ?string,
     *     badgeState: ?string
     * }
     */
    public function toArray(): array
    {
        return [
            'axis' => $this->axis,
            'state' => $this->state,
            'label' => $this->label,
            'classification' => $this->classification,
            'badgeDomain' => $this->badgeDomain?->value,
            'badgeState' => $this->badgeState,
        ];
    }
}
