<?php

namespace App\Enums;

/**
 * 技师等级枚举类
 */
enum TechnicianLevel: int
{
    /**
     * 技师等级:实习技师
     */
    case TRAINEE = 1;

    /**
     * 技师等级:初级技师
     */
    case JUNIOR = 2;

    /**
     * 技师等级:中级技师
     */
    case INTERMEDIATE = 3;

    /**
     * 技师等级:高级技师
     */
    case SENIOR = 4;

    /**
     * 技师等级:专家技师
     */
    case EXPERT = 5;

    /**
     * 技师等级:大师级技师
     */
    case MASTER = 6;

    /**
     * 获取等级的显示文本
     *
     * @return string 等级的中文描述
     */
    public function label(): string
    {
        return match($this) {
            self::TRAINEE => '实习技师',
            self::JUNIOR => '初级技师',
            self::INTERMEDIATE => '中级技师',
            self::SENIOR => '高级技师',
            self::EXPERT => '专家技师',
            self::MASTER => '大师级技师',
        };
    }

    /**
     * 获取等级的整数值
     *
     * @return int 等级值
     */
    public function value(): int
    {
        return $this->value;
    }

    /**
     * 检查当前等级是否与指定等级相同
     *
     * @param self $level 要比较的等级
     * @return bool 如果等级相同返回 true,否则返回 false
     */
    public function is(self $level): bool
    {
        return $this === $level;
    }

    /**
     * 根据整数值创建对应的等级枚举实例
     *
     * @param int $value 等级值
     * @return self|null 返回对应的等级枚举实例,如果值无效则返回 null
     */
    public static function fromValue(int $value): ?self
    {
        return match($value) {
            self::TRAINEE->value => self::TRAINEE,
            self::JUNIOR->value => self::JUNIOR,
            self::INTERMEDIATE->value => self::INTERMEDIATE,
            self::SENIOR->value => self::SENIOR,
            self::EXPERT->value => self::EXPERT,
            self::MASTER->value => self::MASTER,
            default => null
        };
    }

    /**
     * 获取所有等级的值数组
     *
     * @return array 包含所有等级值的数组
     */
    public static function values(): array
    {
        return array_column(self::cases(), 'value');
    }

    /**
     * 获取所有等级的键值对数组
     *
     * @return array 等级值作为键,显示文本作为值的关联数组
     */
    public static function all(): array
    {
        return [
            self::TRAINEE->value => self::TRAINEE->label(),
            self::JUNIOR->value => self::JUNIOR->label(),
            self::INTERMEDIATE->value => self::INTERMEDIATE->label(),
            self::SENIOR->value => self::SENIOR->label(),
            self::EXPERT->value => self::EXPERT->label(),
            self::MASTER->value => self::MASTER->label(),
        ];
    }

  
}