<?php

namespace App\Constants;

// 玩法枚举
class GameplayRuleEnum 
{
    const SINGLE = '单';
    const DOUBLE = '双';
    const BIG = '大';
    const SMALL = '小';
    const EXTREME_BIG = '极大';
    const EXTREME_SMALL = '极小';
    const BAO_ZI = '豹子';
    const PAIRS = '对子';
    const STRAIGHT = '顺子';
    const ONE = '一段';
    const TWO = '二段';
    const THREE = '三段';
    const FOUR = '四段';
    // 包含本身体
    const SUM_BIG = 14;   // 总和算大
    const SUM_SMALL = 13; // 总和算小
    const SUM_EXTREME_BIG = 22;   // 总和极大
    const SUM_EXTREME_SMALL = 6; // 总和极小
    const ONE_BIG = 5; // 尾数算大
    const ONE_SMALL = 4; // 尾数算小
    const SECTION_1 = [6,10];    // 一段范围
    const SECTION_2 = [11,13];   // 二段范围
    const SECTION_3 = [14,16];  // 三段范围
    const SECTION_4 = [17,21];  // 四段范围

    public static $RULES = [
        '总和' => [
            '单',
            '双',
            '大',
            '小',
            '大单',
            '大双',
            '小单',
            '小双',
            '极大',
            '极小',
            '0操',
            '1操',
            '2操',
            '3操',
            '4操',
            '5操',
            '6操',
            '7操',
            '8操',
            '9操',
            '10操',
            '11操',
            '12操',
            '13操',
            '14操',
            '15操',
            '16操',
            '17操',
            '18操',
            '19操',
            '20操',
            '21操',
            '22操',
            '23操',
            '24操',
            '25操',
            '26操',
            '27操',
            '顺子',
            '对子',
            '豹子',
        ],
        '尾数' => [
            '0尾',
            '1尾',
            '2尾',
            '3尾',
            '4尾',
            '5尾',
            '6尾',
            '7尾',
            '8尾',
            '9尾',
            '尾大',
            '尾小',
            '尾单',
            '尾双',
            '尾大单',
            '尾大双',
            '尾小单',
            '尾小双',
        ],
        '个位球' => [
            'A大',
            'A小',
            'A单',
            'A双',
            'B大',
            'B小',
            'B单',
            'B双',
            'C大',
            'C小',
            'C单',
            'C双',
            '0A',
            '1A',
            '2A',
            '3A',
            '4A',
            '5A',
            '6A',
            '7A',
            '8A',
            '9A',
            '0B',
            '1B',
            '2B',
            '3B',
            '4B',
            '5B',
            '6B',
            '7B',
            '8B',
            '9B',
            '0C',
            '1C',
            '2C',
            '3C',
            '4C',
            '5C',
            '6C',
            '7C',
            '8C',
            '9C',
        ],
        '多段' => [
            '一段',
            '二段',
            '三段',
            '四段',
        ]

    ];

    /**
     * 验证并解析用户输入
     * @param string $input 例如 "大单100" / "5操20"
     * @return array|null   返回 ['rule' => 玩法, 'amount' => 金额]，失败返回 null
     */
    public static function validateInput(string $input): ?array
    {
        // 获取所有玩法
        $allRules = array_merge(...array_values(self::$RULES));
        

        // 玩法正则（防止玩法里有特殊符号出错）
        $rulesPattern = implode('|', array_map('preg_quote', $allRules));

        // 匹配玩法 + 金额
        if (preg_match('/^(' . $rulesPattern . ')(\d+)$/u', $input, $matches)) {
            return [
                'rule'   => $matches[1],
                'amount' => (int)$matches[2]
            ];
        }

        return null;
    }
}