<?php

namespace App\Enumerations;

/**
 * Preismodus bei bestehender Umsatzsteuerpflicht: entweder ist die USt bereits im konfigurierten Beitrag
 * enthalten (Brutto/„Supermarkt") oder sie wird bei der Preisermittlung aufgeschlagen (Netto). Gespeichert
 * wird immer der finale Brutto-Beitrag; der Modus beeinflusst nur die Preisermittlung im Anmeldeprozess.
 */
enum VatPricingMode: string
{
    case Inclusive = 'inclusive';
    case AddOn = 'add_on';

    public function label(): string
    {
        return match ($this) {
            self::Inclusive => 'Inklusive – Beiträge sind Endpreise (USt enthalten)',
            self::AddOn => 'Aufschlagen – USt wird auf die Beiträge aufgeschlagen',
        };
    }

    /**
     * Optionen für das Frontend: [['value' => ..., 'label' => ...], ...].
     *
     * @return array<int, array{value: string, label: string}>
     */
    public static function options(): array
    {
        return array_map(
            static fn (self $mode): array => [
                'value' => $mode->value,
                'label' => $mode->label(),
            ],
            self::cases(),
        );
    }
}
