<?php

declare(strict_types=1);

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

it('maps alert delivery status values to canonical badge semantics', function (): void {
    $queued = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'queued');
    expect($queued->label)->toBe('Queued');
    expect($queued->color)->toBe('gray');

    $deferred = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'deferred');
    expect($deferred->label)->toBe('Deferred');
    expect($deferred->color)->toBe('warning');

    $sent = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'sent');
    expect($sent->label)->toBe('Sent');
    expect($sent->color)->toBe('success');

    $failed = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'failed');
    expect($failed->label)->toBe('Failed');
    expect($failed->color)->toBe('danger');

    $suppressed = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'suppressed');
    expect($suppressed->label)->toBe('Suppressed');
    expect($suppressed->color)->toBe('info');

    $canceled = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'canceled');
    expect($canceled->label)->toBe('Canceled');
    expect($canceled->color)->toBe('gray');
});

it('returns unknown badge for invalid alert delivery status', function (): void {
    $unknown = BadgeCatalog::spec(BadgeDomain::AlertDeliveryStatus, 'invalid_status');
    expect($unknown->label)->toBe('Unknown');
    expect($unknown->color)->toBe('gray');
});

it('maps alert destination last test status values to canonical badge semantics', function (): void {
    $never = BadgeCatalog::spec(BadgeDomain::AlertDestinationLastTestStatus, 'never');
    expect($never->label)->toBe('Never');
    expect($never->color)->toBe('gray');

    $sent = BadgeCatalog::spec(BadgeDomain::AlertDestinationLastTestStatus, 'sent');
    expect($sent->label)->toBe('Sent');
    expect($sent->color)->toBe('success');

    $failed = BadgeCatalog::spec(BadgeDomain::AlertDestinationLastTestStatus, 'failed');
    expect($failed->label)->toBe('Failed');
    expect($failed->color)->toBe('danger');

    $pending = BadgeCatalog::spec(BadgeDomain::AlertDestinationLastTestStatus, 'pending');
    expect($pending->label)->toBe('Pending');
    expect($pending->color)->toBe('warning');
});

it('returns unknown badge for invalid last test status', function (): void {
    $unknown = BadgeCatalog::spec(BadgeDomain::AlertDestinationLastTestStatus, 'nonexistent');
    expect($unknown->label)->toBe('Unknown');
    expect($unknown->color)->toBe('gray');
});
