<?php

namespace App\Invoice\Enums;

use Illuminate\Support\Collection;

enum InvoiceStatus: string
{
    case NEW = 'Neu';
    case SENT = 'Rechnung gestellt';
    case PAID = 'Rechnung beglichen';

    /**
     * @return Collection<int, string>
     */
    public static function values(): Collection
    {
        return collect(static::cases())->map(fn ($case) => $case->value);
    }

    /**
     * @return Collection<int, string>
     */
    public static function defaultVisibleValues(): Collection
    {
        return collect(static::cases())->filter(fn ($value) => $value->defaultVisible())->map(fn ($case) => $case->value);
    }

    public function defaultVisible(): bool
    {
        return match ($this) {
            static::NEW => true,
            static::SENT => true,
            static::PAID => false
        };
    }

    /**
     * @return array<int, array{id: string, name: string}>
     */
    public static function forSelect(): array
    {
        return array_map(fn ($case) => ['id' => $case->value, 'name' => $case->value], static::cases());
    }
}