<?php

namespace App\Enums;

enum SlotVolatility: string
{
    case LOW = 'low';
    case LOW_MEDIUM = 'low-medium';
    case MEDIUM = 'medium';
    case MEDIUM_HIGH = 'medium-high';
    case HIGH = 'high';

    public function label(): string
    {
        return match($this) {
            self::LOW => 'Low',
            self::MEDIUM => 'Medium',
            self::HIGH => 'High',
            self::LOW_MEDIUM => 'Low-Medium',
            self::MEDIUM_HIGH => 'Medium-High',

        };
    }

    public function score(): int
    {
        return match($this) {
            self::LOW => 1,
            self::LOW_MEDIUM => 3,
            self::MEDIUM => 5,
            self::MEDIUM_HIGH => 8,
            self::HIGH => 10,
        };
    }

    public function cssColorClass(): string
    {
        return match($this) {
            self::LOW => 'best',           // Самая низкая волатильность - лучше всего
            self::LOW_MEDIUM => 'medium-good',   // Низко-средняя волатильность
            self::MEDIUM => 'good',        // Средняя волатильность
            self::MEDIUM_HIGH => 'medium-bed',  // Средне-высокая волатильность
            self::HIGH => 'bad',           // Высокая волатильность - хуже всего
        };
    }

    public static function selectOptions(): array
    {
        $options = [];
        foreach (self::sorted() as $case) {
            $options[$case->value] = $case->label();
        }
        return $options;
    }

    public static function values(): array
    {
        return array_map(fn($case) => $case->value, self::cases());
    }

    public static function sorted(): array
    {
        // Получаем все случаи enum
        $cases = self::cases();

        // Сортируем по score (от меньшего к большему)
        usort($cases, function($a, $b) {
            return $a->score() <=> $b->score(); // Spaceship оператор: -1, 0, или 1
        });

        return $cases; // LOW, LOW_MEDIUM, MEDIUM, MEDIUM_HIGH, HIGH
    }
}
