<?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 adminerror($msg = '请求成功', $data = [], $code = ERROR)
    {
        $result = [
            'code'    => $code,
            'message' => $msg,
            'time'    => time(),
            'data'    => $data,
        ];
        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'  => '我的资产',
            ], [
                'value' => 2,
                'name'  => '推荐奖',
            ], [
                'value' => 3,
                'name'  => '持股数量',
            ],
            [
                'value' => 4,
                'name'  => '持股总价值',
            ]
            , [
                'value' => 5,
                'name'  => '股权分红',
            ]
        ];
        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
     */
//我的资产
    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');
//股权分红
    define('moldType5', 5);
    define('moldTypefild5', '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',
            ]
        ];
        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);

    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'  => '出售股权',
            ]
        ];
        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       = '6221';                                                              // 定义账号前缀，如银行标识
        $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 '';
        }

    }