<?php

use App\Traits\Enum\WithComment;
use Filament\Support\Contracts\HasLabel;

enum TestCommentEnum: string implements HasLabel
{
    use WithComment;

    case ACTIVE = 'active';
    case INACTIVE = 'inactive';

    public function getLabel(): ?string
    {
        return match ($this) {
            self::ACTIVE => 'Status Aktif',
            self::INACTIVE => 'Status Tidak Aktif',
        };
    }
}

describe('WithComment Trait', function () {
    it('can generate comment string from enum cases', function () {
        $comment = TestCommentEnum::comment();

        expect($comment)->toBeString()
            ->and($comment)->toContain('active: Status Aktif')
            ->and($comment)->toContain('inactive: Status Tidak Aktif');
    });

    it('formats comment with comma separation', function () {
        $comment = TestCommentEnum::comment();

        expect($comment)->toContain(', ');
    });

    it('includes all enum cases in comment', function () {
        $comment = TestCommentEnum::comment();
        $cases = TestCommentEnum::cases();

        foreach ($cases as $case) {
            expect($comment)->toContain($case->value);
            expect($comment)->toContain($case->getLabel());
        }
    });
});
