<?php

namespace freedom\utils;

class DiceUtil
{
    /**
     * 根据结果输出某点的次数
     * @param $resultArray  // 结果数组
     * @param $living       // 点数
     * @return int
     */
    public static function getLivingCount($resultArray, $living): int
    {
        $count = 0;
        foreach ($resultArray as $k => $v){
            if (intval($v) == $living){
                $count++;
            }
        }
        return $count;
    }
    /**
     * 分析结果 控制端传入三个数 方法对其分析 输出结果
     * @param $resultArray
     * @return array
     */
    public static function parseResult($resultArray): array
    {
        // 返回数组
        $returnArray = [];
        $returnArray[] = 'living_' . $resultArray[0];
        $returnArray[] = 'living_' . $resultArray[1];
        $returnArray[] = 'living_' . $resultArray[2];
        // int类型结果数组
        $intResultArray = [];
        foreach ($resultArray as $v) {
            $intResultArray[] = intval($v);
        }
        $total = array_sum($intResultArray);
        if ($total > 3 && $total < 18) {
            $returnArray[] = 'number_' . $total;
        }
        // 判断是不是全部值都是一样的
        $uniqueArray = array_unique($intResultArray);
        // 重新排序
        sort($uniqueArray);
        if (count($uniqueArray) == 1) {
            $returnArray[] = 'two_'.$uniqueArray[0] . $uniqueArray[0];
            $returnArray[] = 'three_'.$uniqueArray[0] . $uniqueArray[0] . $uniqueArray[0];
            $returnArray[] = 'leopard';
        } else {
            if ($total >= 4 && $total <= 10) {
                $returnArray[] = 'small';
            }
            if ($total >= 11 && $total <= 17) {
                $returnArray[] = 'big';
            }
            if ($total % 2 == 0) {
                $returnArray[] = 'plural';
            } else {
                $returnArray[] = 'singular';
            }
        }
        if (count($uniqueArray) == 2) {
            $returnArray[] = 'two_'.$uniqueArray[0] . $uniqueArray[1];
            $pointArr = array_count_values($resultArray);
            foreach ($pointArr as $key => $value){
                if($value == 2){
                    $returnArray[] = 'two_'.$key . $key;
                }
            }
        }
        if (count($uniqueArray) == 3) {
            $returnArray[] = 'two_'.$uniqueArray[0] . $uniqueArray[1];
            $returnArray[] = 'two_'.$uniqueArray[0] . $uniqueArray[2];
            $returnArray[] = 'two_'.$uniqueArray[1] . $uniqueArray[2];
        }
        return $returnArray;
    }

    /**
     * 分析统计 分析结果 控制端传入三个数 方法对其分析 输出结果
     * @param $resultArray
     * @return array
     */
    public static function parseCount($resultArray): array
    {
        $returnArray = [];
        // int类型结果数组
        $intResultArray = [];
        foreach ($resultArray as $v) {
            $intResultArray[] = intval($v);
        }
        $total = array_sum($intResultArray);
        // 判断是不是全部值都是一样的
        $uniqueArray = array_unique($intResultArray);
        if (count($uniqueArray) == 1) {
            $returnArray[] = 'leopard';
        } else {
            if ($total >= 4 && $total <= 10) {
                $returnArray[] = 'small';
            }
            if ($total >= 11 && $total <= 17) {
                $returnArray[] = 'big';
            }
            if ($total % 2 == 0) {
                $returnArray[] = 'plural';
            } else {
                $returnArray[] = 'singular';
            }
        }
        return $returnArray;
    }

    /**
     * 统计自增方法
     * @param $beforeCountArray
     * @param $afterCountArray
     * @return int[]
     */
    public static function countInc($beforeCountArray, $afterCountArray): array
    {
        if (empty($beforeCountArray)){
            $beforeCountArray = ['leopard' => 0, 'small' => 0, 'big' => 0, 'singular' => 0, 'plural' => 0];
        }
        foreach ($beforeCountArray as $k => $v){
            if (in_array($k, $afterCountArray)){
                $beforeCountArray[$k] = $v + 1;
            }
        }
        return $beforeCountArray;
    }

    /**
     * 下注额自增方法
     * @param $beforeAmountArray
     * @param $afterAmountArray
     * @return array
     */
    public static function amountInc($beforeAmountArray, $afterAmountArray): array
    {
        $returnArray = [];
        foreach ($afterAmountArray as $k => $v){
            if (array_key_exists($k, $beforeAmountArray)){
                $returnArray[$k] = $beforeAmountArray[$k] + $v;
                unset($beforeAmountArray[$k]);
            } else {
                $returnArray[$k] = $v;
            }
        }
        return $returnArray + $beforeAmountArray;
    }
}