<?php

namespace App\Libs\TikTok\MiniProgram\Share;

use App\Libs\TikTok\Kernel\BaseClient;

class Client extends BaseClient
{
    /**
     * 该接口用于生成能够直接跳转到端内小程序的 url link
     * 接口有频次限制，每个小程序，100qps，50w 次/自然日。
     *
     * @param string $path
     * @param string $query
     * @param string $appName
     * @return array
     * @throws \App\Libs\TikTok\Kernel\Exceptions\HttpException
     * @throws \App\Libs\TikTok\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function generateLink(string $path = '', string $query = '{}', string $appName = 'douyin'): array
    {
        $params = [
            'ma_app_id'   => $this->app['config']['app_id'], // 小程序ID
            'app_name'    => $appName,                       // 宿主名称，可选 douyin，douyinlite
            'path'        => $path,                          // 通过URL Link进入的小程序页面路径，必须是已经发布的小程序存在的页面，不可携带 query。path 为空时会跳转小程序主页。
            'query'       => $query,                         // 通过URL Link进入小程序时的 query（json形式），若无请填{}。最大1024个字符，只支持数字，大小写英文以及部分特殊字符
            'expire_time' => time() + 180 * 86400            // 到期失效的URL Link的失效时间。为 Unix 时间戳，实际失效时间为距离当前时间小时数，向上取整。最长间隔天数为180天。
        ];

        return $this->httpPostJson('apps/url_link/generate', $params);
    }

    /**
     * 查询已经生成的 link 的信息，过期的 url_link 返回"url_link 不存在"。
     *
     * @param string $urlLink
     * @return array
     * @throws \App\Libs\TikTok\Kernel\Exceptions\HttpException
     * @throws \App\Libs\TikTok\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function getQueryInfo($urlLink='') {
        $params = [
            'ma_app_id' => $this->app['config']['app_id'], // 小程序ID
            'url_link'  => $urlLink
        ];
        return $this->httpPostJson('apps/url_link/query_info', $params);
    }

    /**
     * 获取小程序/小游戏的二维码。该二维码可通过任意 app 扫码打开，能跳转到开发者指定的对应字节系 app 内拉起小程序/小游戏， 并传入开发者指定的参数。通过该接口生成的二维码，永久有效，暂无数量限制。
     *
     * @param string $path
     * @param string $query
     * @param string $appName
     * @return array
     * @throws \App\Libs\TikTok\Kernel\Exceptions\HttpException
     * @throws \App\Libs\TikTok\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function createQRCode(string $path = '', string $query = '{}', string $appName = 'douyin') {
        $params = [
            'ma_app_id' => $this->app['config']['app_id'], // 小程序ID
            'app_name'  => $appName,
            'path'      => $path,
        ];
        return $this->httpPostJson('apps/qrcode', $params);
    }
}
