<?php
namespace app\common\enum\worker;

/**
 * 工程师账户流水变动表枚举
 * Class AccountLogEnum
 * @package app\common\enum
 */
class WorkerAccountLogEnum
{
    /**
     * 变动类型命名规则：对象_动作_简洁描述
     * 动作 DEC-减少 INC-增加
     * 对象 UM-工程师余额
     */

    /**
     * 变动对象
     * UM 工程师余额(user_money)
     */
    const UM = 1;

    /**
     * 动作
     * INC 增加
     * DEC 减少
     * FROZEN 冻结
     * RELEASE 解冻
     */
    const INC = 1;
    const DEC = 2;
    const FROZEN = 3;
    const RELEASE = 4;


    /**
     * 工程师余额减少类型
     */
    const UM_DEC_ADMIN = 100;
    /**
     * 工程师余额增加类型
     */
    const UM_INC_ADMIN = 200;
    /**
     * 工程师提现类型
     */
    const UM_CASH_OUT = 300;

    /**
     * 工程师余额（减少类型汇总）
     */
    const UM_DEC = [
        self::UM_DEC_ADMIN,
    ];


    /**
     * 工程师余额（增加类型汇总）
     */
    const UM_INC = [
        self::UM_INC_ADMIN,
    ];


    /**
     * @notes 动作描述
     * @param $action
     * @param false $flag
     * @return string|string[]
     */
    public static function getActionDesc($action, $flag = false)
    {
        $desc = [
            self::DEC => '减少',
            self::INC => '增加',
        ];
        if ($flag) {
            return $desc;
        }
        return $desc[$action] ?? '';
    }


    /**
     * @notes 变动类型描述
     * @param $changeType
     * @param false $flag
     * @return string|string[]
     */
    public static function getChangeTypeDesc($changeType, $flag = false)
    {
        $desc = [
            self::UM_DEC_ADMIN => '平台减少余额',
            self::UM_INC_ADMIN => '平台增加余额',
            self::UM_CASH_OUT => '工程师提现余额',
        ];
        if ($flag) {
            return $desc;
        }
        return $desc[$changeType] ?? '';
    }


    /**
     * @notes 获取工程师余额类型描述
     * @return string|string[]
     */
    public static function getUserMoneyChangeTypeDesc()
    {
        $UMChangeType = self::getUserMoneyChangeType();
        $changeTypeDesc = self::getChangeTypeDesc('', true);
        return array_filter($changeTypeDesc, function ($key) use ($UMChangeType) {
            return in_array($key, $UMChangeType);
        }, ARRAY_FILTER_USE_KEY);
    }


    /**
     * @notes 获取工程师余额变动类型
     * @return int[]
     */
    public static function getUserMoneyChangeType() : array
    {
        return array_merge(self::UM_DEC, self::UM_INC);
    }


    /**
     * @notes 获取变动对象
     * @param $changeType
     * @return false
     */
    public static function getChangeObject($changeType)
    {
        // 工程师余额
        $um = self::getUserMoneyChangeType();
        if (in_array($changeType, $um)) {
            return self::UM;
        }

        // 其他...

        return false;
    }
}