<?php
    /**
     * Here is your custom functions.
     */

    use Firebase\JWT\JWT;
    use Firebase\JWT\Key;

    /* @登录失效码*/
    define('USER_INVALID', 4008);
    /* @无权限码*/
    define('USER_AUTH', 4009);
    /* @错误码*/
    define('ERROR', 400);
    /* @成功码*/
    define('SUCCESS', 0);


    function error($msg = '请求成功', $data = [], $code = ERROR)
    {
        $result = [
            'code'    => $code,
            'message' => $msg,
            'time'    => time(),
            'data'    => $data,
        ];
        $result = encrypt($result);
        return json($result);
    }


    function success($data = [], $msg = '请求成功', $code = 200, $count = 0)
    {
        $result = [
            'code'    => $code,
            'message' => $msg,
            'data'    => $data,
            'count'   => $count
        ];
        $result = encrypt($result);
        return json($result);
    }

    function adminsuccess($data = [], $msg = '请求成功', $code = 200, $count = 0)
    {
        $result = [
            'code'    => $code,
            'message' => $msg,
            'data'    => $data,
            'count'   => $count
        ];
        return json($result);
    }

    /** 加密
     * @param $data
     * @return void
     */
    function jwtEncode($data)
    {
        return JWT::encode($data, getenv('JWT_PRIVATEKEY'), 'HS256');
    }

    /** 解密
     * @param $data
     * @return void
     */
    function jwtDecode($data)
    {
        try {
            $data = JWT::decode($data, new Key(getenv('JWT_PRIVATEKEY'), 'HS256'));
        } catch (\Exception $exception) {
            throw new \Exception('验证失败');
        }
        return $data;
    }

    /** 钱包名称
     * @param $value
     * @return array[]|mixed
     */
    function moldType($value = '')
    {
        $arr = [
            [
                'value' => 1,
                'name'  => 'USD',
            ], [
                'value' => 2,
                'name'  => '基金分红钱包',
            ], [
                'value' => 3,
                'name'  => '银行卡余额',
            ], [
                'value' => 4,
                'name'  => '银行卡基础额度',
            ], [
                'value' => 5,
                'name'  => 'wroldcion币',
            ], [
                'value' => 6,
                'name'  => '消费体验金',
            ], [
                'value' => 7,
                'name'  => '理财每日利息',
            ], [
                'value' => 8,
                'name'  => '团队佣金',
            ], [
                'value' => 9,
                'name'  => '团队补贴',
            ], [
                'value' => 10,
                'name'  => '已解冻余额',
            ], [
                'value' => 11,
                'name'  => '大使收益钱包',
            ], [
                'value' => 12,
                'name'  => '减贫财富钱包',
            ], [
                'value' => 13,
                'name'  => '每日交易世界币额度',
            ], [
                'value' => 14,
                'name'  => '每日交易USD额度',
            ], [
                'value' => 55,
                'name'  => 'wroldcion币',
            ]
        ];
        if ($value) {
            $data = collect($arr)->where('value', $value)->first();
            return $data['name'];
        } else {
            return $arr;
        }
    }

    /**  产品类型
     * @param $type
     * @return string
     */
    function cardNumberType($type = '')
    {
        if ($type == 1) {
            return '股权产品';
        } else {
            return '无';
        }
    }


    /**钱包字段
     * @param $value
     * @return array[]|mixed
     */
    //USD
    define('moldType1', 1);
    define('moldTypefild1', 'money');
    //基金分红钱包
    define('moldType2', 2);
    define('moldTypefild2', 'money_one');
    //银行卡余额
    define('moldType3', 3);
    define('moldTypefild3', 'money_two');
    //银行卡基础额度
    define('moldType4', 4);
    define('moldTypefild4', 'money_four');
    //wroldcion币
    define('moldType5', 5);
    define('moldTypefild5', 'money_five');
    //矿机分红钱包--消费体验金
    define('moldType6', 6);
    define('moldTypefild6', 'money_six');
    //理财每日利息
    define('moldType7', 7);
    define('moldTypefild7', 'money_seven');
    //团队佣金
    define('moldType8', 8);
    define('moldTypefild8', 'money_eight');
    //团队补贴
    define('moldType9', 9);
    define('moldTypefild9', 'money_nine');
    //已解冻余额
    define('moldType10', 10);
    define('moldTypefild10', 'money_ten');
    //大使收益钱包
    define('moldType11', 11);
    define('moldTypefild11', 'money_eleven');
    //减贫财富钱包
    define('moldType12', 12);
    define('moldTypefild12', 'money_twelve');
    //每日交易世界币额度
    define('moldType13', 13);
    define('moldTypefild13', 'money_thirteen');
    //每日交易USD额度
    define('moldType14', 14);
    define('moldTypefild14', 'money_fourteen');
    //每日交易USD额度
    define('moldType55', 55);
    define('moldTypefild55', 'money_five');
    function moldTypefild($value = '')
    {
        $arr = [
            [
                'value' => 1,
                'name'  => 'money',
            ], [
                'value' => 2,
                'name'  => 'money_one',
            ], [
                'value' => 3,
                'name'  => 'money_two',
            ], [
                'value' => 4,
                'name'  => 'money_four',
            ], [
                'value' => 5,
                'name'  => 'money_five',
            ], [
                'value' => 6,
                'name'  => 'money_six',
            ], [
                'value' => 7,
                'name'  => 'money_seven',
            ], [
                'value' => 8,
                'name'  => 'money_eight',
            ], [
                'value' => 9,
                'name'  => 'money_nine',
            ], [
                'value' => 10,
                'name'  => 'money_ten',
            ], [
                'value' => 11,
                'name'  => 'money_eleven',
            ], [
                'value' => 12,
                'name'  => 'money_twelve',
            ], [
                'value' => 13,
                'name'  => 'money_thirteen',
            ], [
                'value' => 14,
                'name'  => 'money_fourteen',
            ], [
                'value' => 55,
                'name'  => 'money_five',
            ]
        ];
        if ($value) {
            $data = collect($arr)->where('value', $value)->first();
            return $data['name'];
        } else {
            return $arr;
        }
    }

    /** 流水类型 */
    /** 注册奖励 */
    define('streamType1', 1);
    /** 签到 */
    define('streamType2', 2);
    /**  邀请*/
    define('streamType3', 3);
    /** 提现 */
    define('streamType4', 4);
    /** 购买 */
    define('streamType5', 5);
    /** 提现驳回 */
    define('streamType6', 6);
    /** 平台充值 */
    define('streamType7', 7);
    /** 平台扣款 */
    define('streamType8', 8);
    /** 理财收益 */
    define('streamType9', 9);
    /** 佣金 */
    define('streamType10', 10);
    /** 实名奖励 */
    define('streamType11', 11);

    /** 助力赠送 */
    define('streamType12', 12);
    /** 基金分红 */
    define('streamType13', 13);
    /** 兑换 */
    define('streamType14', 14);
    /** 到期返还 */
    define('streamType15', 15);
    /** 助力 */
    define('streamType16', 16);
    /** 世界币转账 */
    define('streamType17', 17);
    /** 矿机购买 */
    define('streamType18', 18);
    /** 矿机产生 */
    define('streamType19', 19);
    /** 参与矿机每日获赠 */
    define('streamType20', 20);
    /** 理财抵扣 */
    define('streamType21', 21);
    /** 手续费 */
    define('streamType22', 22);
    /** 解冻 */
    define('streamType23', 23);
    /** 兑换 */
    define('streamType24', 24);
    /** 理财解冻 */
    define('streamType25', 25);
    /** 减贫收益 */
    define('streamType26', 26);
    /** 减贫解冻 */
    define('streamType27', 27);
    /** 减贫支付 */
    define('streamType28', 28);
    /** 赠送 */
    define('streamType29', 29);
    /** 减贫解冻 */
    define('streamType30', 30);
    /** 平台赠送 */
    define('streamType31', 31);
    /** 兑换 */
    define('streamType32', 32);
    /** 平台赠送 */
    define('streamType33', 33);
    /** 平台赠送 */
    define('streamType34', 34);
    /** 平台赠送 */
    define('streamType35', 35);
    /** 减贫财富 */
    define('streamType36', 36);
    /** 减贫财富每日分红 */
    define('streamType37', 37);
    function streamType($value = '')
    {
        $arr = [
            [
                'value' => 1,
                'name'  => '注册奖励',
            ],
            [
                'value' => 2,
                'name'  => '签到',
            ],
            [
                'value' => 3,
                'name'  => '邀请福利',
            ],
            [
                'value' => 4,
                'name'  => '提现',
            ],
            [
                'value' => 5,
                'name'  => '购买',
            ],
            [
                'value' => 6,
                'name'  => '提现驳回',
            ],
            [
                'value' => 7,
                'name'  => '平台充值',
            ],
            [
                'value' => 8,
                'name'  => '平台扣款',
            ],
            [
                'value' => 9,
                'name'  => '理财',
            ],
            [
                'value' => 10,
                'name'  => '佣金',
            ],
            [
                'value' => 11,
                'name'  => '实名奖励',
            ],
            [
                'value' => 12,
                'name'  => '助力赠送',
            ],
            [
                'value' => 13,
                'name'  => '基金分红',
            ],
            [
                'value' => 14,
                'name'  => '兑换',
            ],
            [
                'value' => 15,
                'name'  => '到期返还',
            ],
            [
                'value' => 16,
                'name'  => '助力',
            ],
            [
                'value' => 17,
                'name'  => '世界币转账',
            ],
            [
                'value' => 18,
                'name'  => '矿机购买',
            ],
            [
                'value' => 19,
                'name'  => '矿机产生',
            ],
            [
                'value' => 20,
                'name'  => '参与矿机每日获赠',
            ],
            [
                'value' => 21,
                'name'  => '理财抵扣',
            ],
            [
                'value' => 22,
                'name'  => '手续费',
            ],
            [
                'value' => 23,
                'name'  => '解冻',
            ],
            [
                'value' => 24,
                'name'  => '兑换',
            ],
            [
                'value' => 25,
                'name'  => '理财解冻',
            ],
            [
                'value' => 26,
                'name'  => '减贫收益',
            ],
            [
                'value' => 27,
                'name'  => '减贫解冻',
            ],
            [
                'value' => 28,
                'name'  => '减贫支付',
            ],
            [
                'value' => 29,
                'name'  => '赠送',
            ],
            [
                'value' => 30,
                'name'  => '减贫解冻',
            ],
            [
                'value' => 31,
                'name'  => '平台赠送',
            ],
            [
                'value' => 32,
                'name'  => '兑换',
            ],
            [
                'value' => 33,
                'name'  => '平台赠送',
            ],
            [
                'value' => 34,
                'name'  => '平台赠送',
            ],
            [
                'value' => 35,
                'name'  => '平台赠送',
            ],
            [
                'value' => 36,
                'name'  => '减贫财富',
            ],
            [
                'value' => 37,
                'name'  => '减贫财富每日分红',
            ]
        ];
        if ($value) {
            $data = collect($arr)->where('value', $value)->first();
            return $data['name'];
        } else {
            return $arr;
        }
    }

    /** 获取未来时间 */
    function futureDay($day)
    {
        return date('Y-m-d', strtotime("+$day days")) . ' 23:59:59';
    }

    /** 后台登录名称 */
    function adminName()
    {
        return md5(getenv('PROJECT') . date('Ymd'));
    }


    function imgtxt($html)
    {
        if (empty($html)) {
            return $html;
        }
// 要替换的目标字符串
        $target = getenv('IMG');
// 正则表达式匹配所有<img>标签
        $pattern = '/<img[^>]+/i';
// 正则表达式匹配src属性
        $src_pattern = '/src="([^"]+)/i';

// 执行替换
        $replaced_html = preg_replace_callback($pattern, function ($matches) use ($src_pattern, $target) {
            // 匹配src属性
            preg_match($src_pattern, $matches[0], $src_matches);
            // 如果找到了src属性，则替换它
            if (isset($src_matches[1])) {
                // 构造新的<img>标签

                if (strpos($src_matches[1], 'http') !== false) {

                } else {
                    return str_replace($src_matches[1], imageToBase64($src_matches[1]), $matches[0]);
                }

            }
            // 如果没有找到src属性，直接返回原始<img>标签
            return $matches[0];
        }, $html);

// 输出替换后的HTML内容
        return $replaced_html;
    }

    function uuid()
    {
        $uuid = \support\Db::table('wa_users')->orderByDesc('uuid')->value('uuid');
        return bcadd($uuid, bcadd(mt_rand(100, 999), date('d')));
    }


    /**
     * 生成银行卡号
     * @param $length
     * @return string
     */
    function generateBankAccountNumber($length = 19)
    {
        $prefix       = '51';                                                              // 定义账号前缀，如银行标识
        $suffixLength = $length - strlen($prefix);                                           // 计算后缀的长度
        $suffix       = substr(mt_rand(100000000000000, 999999999999999), 0, $suffixLength); // 随机生成后缀
        return $prefix . $suffix;
    }

    /**
     * 生成证 书编号
     * @return string
     * @throws \Random\RandomException
     */
    function generateCertificateNumber($length = 12)
    {
        $prefix       = 'JZYH';                                                              // 定义账号前缀，如银行标识
        $suffixLength = $length - strlen($prefix);                                           // 计算后缀的长度
        $suffix       = substr(mt_rand(100000000000000, 999999999999999), 0, $suffixLength); // 随机生成后缀
        return $prefix . $suffix;
    }

    /**
     * 生成随机字母
     * @param $length
     * @return string
     */
    function RandomAlphaNum($length = 4)
    {
        $randomString = '';
        for ($i = 0; $i < $length; $i ++) {
            $randomString .= chr(rand(65, 90)); // 生成大写字母 'A' 到 'Z'
            // 如果需要包含小写字母，取消下面这行的注释
            // $randomString .= chr(rand(97, 122)); // 生成小写字母 'a' 到 'z'
        }
        return $randomString;
    }

    function encrypt($data)
    {
        $info = openssl_encrypt (json_encode($data, JSON_UNESCAPED_UNICODE), 'AES-128-ECB', getenv ("JWT_AESKEY"), OPENSSL_RAW_DATA) ;
        return base64_encode ($info);
    }

    function imageToBase64($imagePath)
    {
        if (file_exists('./public'.$imagePath) && !empty($imagePath)) {
//            $image  = file_get_contents('./public'.$imagePath);
//            $base64 = base64_encode($image);
//            return 'data:image/jpeg;base64,' . $base64; // 这里假设图片为JPEG格式，根据实际需要修改
            return getenv('IMG').$imagePath;
        } else {
            return '';
        }

    }

/**
 * 身份证校验
 * @param $id
 * @return bool
 */
function isValidChineseIDCard18($id) {
    if (!preg_match('/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))((0[1-9])|([1-2][0-9])|30|31)\d{3}[\dXx]$/i', $id)) {
        return false; // 格式不正确
    }
    // 校验码计算
    $id = str_split($id);
    $factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    $checksum = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    $sum = 0;
    foreach ($factor as $key => $value) {
        $sum += $id[$key] * $value;
    }
    $mod = $sum % 11;
    return strtoupper($id[17]) === $checksum[$mod]; // 比较校验码
}