<?php

declare(strict_types=1);

namespace App\Support\Concerns;

use Illuminate\Support\Str;

/**
 * 将业务枚举展示文案统一走 lang/{locale}/dberp.php 的 `options.{snake(类名)}.{case value}`。
 * 个别历史分组名与类名 snake 不一致时，在枚举内覆盖 {@see self::dberpEnumOptionGroup()}。
 */
trait TranslatesDberpBackedEnumLabel
{
    public function label(): string
    {
        $group = static::dberpEnumOptionGroup();
        $key = 'dberp.options.'.$group.'.'.$this->value;
        $line = __($key);

        return $line === $key ? (string) $this->value : (string) $line;
    }

    /**
     * @return array<string, string>
     */
    public static function options(): array
    {
        $options = [];

        foreach (static::cases() as $case) {
            $options[$case->value] = $case->label();
        }

        return $options;
    }

    public static function dberpEnumOptionGroup(): string
    {
        return Str::snake(class_basename(static::class));
    }
}
