<?php

declare(strict_types=1);

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

it('maps tenant status values to canonical badge semantics', function (): void {
    $active = BadgeCatalog::spec(BadgeDomain::TenantStatus, 'active');
    expect($active->label)->toBe('Active');
    expect($active->color)->toBe('success');

    $archived = BadgeCatalog::spec(BadgeDomain::TenantStatus, 'archived');
    expect($archived->label)->toBe('Archived');
    expect($archived->color)->toBe('gray');

    $suspended = BadgeCatalog::spec(BadgeDomain::TenantStatus, 'suspended');
    expect($suspended->label)->toBe('Suspended');
    expect($suspended->color)->toBe('warning');

    $error = BadgeCatalog::spec(BadgeDomain::TenantStatus, 'error');
    expect($error->label)->toBe('Error');
    expect($error->color)->toBe('danger');
});

it('maps tenant app status values to canonical badge semantics', function (): void {
    $ok = BadgeCatalog::spec(BadgeDomain::TenantAppStatus, 'ok');
    expect($ok->label)->toBe('OK');
    expect($ok->color)->toBe('success');

    $consentRequired = BadgeCatalog::spec(BadgeDomain::TenantAppStatus, 'consent_required');
    expect($consentRequired->label)->toBe('Consent required');
    expect($consentRequired->color)->toBe('warning');

    $error = BadgeCatalog::spec(BadgeDomain::TenantAppStatus, 'error');
    expect($error->label)->toBe('Error');
    expect($error->color)->toBe('danger');
});

it('maps tenant RBAC status values to canonical badge semantics', function (): void {
    $configured = BadgeCatalog::spec(BadgeDomain::TenantRbacStatus, 'configured');
    expect($configured->label)->toBe('Configured');
    expect($configured->color)->toBe('success');

    $manual = BadgeCatalog::spec(BadgeDomain::TenantRbacStatus, 'manual_assignment_required');
    expect($manual->label)->toBe('Manual assignment required');
    expect($manual->color)->toBe('warning');

    $notConfigured = BadgeCatalog::spec(BadgeDomain::TenantRbacStatus, 'not_configured');
    expect($notConfigured->label)->toBe('Not configured');
    expect($notConfigured->color)->toBe('gray');
});

it('maps tenant permission status values to canonical badge semantics', function (): void {
    $granted = BadgeCatalog::spec(BadgeDomain::TenantPermissionStatus, 'granted');
    expect($granted->label)->toBe('Granted');
    expect($granted->color)->toBe('success');

    $missing = BadgeCatalog::spec(BadgeDomain::TenantPermissionStatus, 'missing');
    expect($missing->label)->toBe('Missing');
    expect($missing->color)->toBe('warning');

    $error = BadgeCatalog::spec(BadgeDomain::TenantPermissionStatus, 'error');
    expect($error->label)->toBe('Error');
    expect($error->color)->toBe('danger');
});
