<?php

declare(strict_types=1);

use App\Models\FindingException;
use App\Support\Badges\BadgeCatalog;
use App\Support\Badges\BadgeDomain;

it('maps finding exception lifecycle states to canonical badge semantics', function (): void {
    $pending = BadgeCatalog::spec(BadgeDomain::FindingExceptionStatus, FindingException::STATUS_PENDING);
    expect($pending->label)->toBe('Pending')
        ->and($pending->color)->toBe('warning');

    $expiring = BadgeCatalog::spec(BadgeDomain::FindingExceptionStatus, FindingException::STATUS_EXPIRING);
    expect($expiring->label)->toBe('Expiring')
        ->and($expiring->color)->toBe('warning');

    $expired = BadgeCatalog::spec(BadgeDomain::FindingExceptionStatus, FindingException::STATUS_EXPIRED);
    expect($expired->label)->toBe('Expired')
        ->and($expired->color)->toBe('danger');

    $revoked = BadgeCatalog::spec(BadgeDomain::FindingExceptionStatus, FindingException::STATUS_REVOKED);
    expect($revoked->label)->toBe('Revoked')
        ->and($revoked->color)->toBe('danger');
});

it('maps governance validity states to canonical badge semantics', function (): void {
    $valid = BadgeCatalog::spec(BadgeDomain::FindingRiskGovernanceValidity, FindingException::VALIDITY_VALID);
    expect($valid->label)->toBe('Valid')
        ->and($valid->color)->toBe('success');

    $expiring = BadgeCatalog::spec(BadgeDomain::FindingRiskGovernanceValidity, FindingException::VALIDITY_EXPIRING);
    expect($expiring->label)->toBe('Expiring')
        ->and($expiring->color)->toBe('warning');

    $expired = BadgeCatalog::spec(BadgeDomain::FindingRiskGovernanceValidity, FindingException::VALIDITY_EXPIRED);
    expect($expired->label)->toBe('Expired')
        ->and($expired->color)->toBe('danger');

    $missingSupport = BadgeCatalog::spec(BadgeDomain::FindingRiskGovernanceValidity, FindingException::VALIDITY_MISSING_SUPPORT);
    expect($missingSupport->label)->toBe('Missing support')
        ->and($missingSupport->color)->toBe('danger');
});
