<?php

/**
 * Class DefaultController
 * @author Blackbinbin
 */
class DefaultController extends BaseController {

    protected $ajaxLoginActions = [
        'tick',
    ];

    public function __construct() {
        parent::__construct(true);
    }


    /**
     * 判断ip，输出首页
     */
    public function actionIndex() {
        $this->tpl->display('index');
    }

    /**
     * 判断ip，输出首页
     */
    public function actionMini() {
        $html = $this->tpl->fetch('mini');
        $html = str_replace('<link rel=manifest ', '<link ', $html);

        Response::exitMsg($html, CODE_SUCCESS, '', true);
    }

    public function actionPC() {
        $html = $this->tpl->fetch('pc');
        //        <link rel=manifest href="//static.meechat.me/cdn/new.mee.chat/dist/manifest
        $html = str_replace('/dist/manifest.json', '/manifest_pc.json', $html);
        Response::exitMsg($html, CODE_SUCCESS, '', true);
    }

    public function actionH5() {
        $html = $this->tpl->fetch('h5');
        $html = str_replace('/dist/manifest.json', '/manifest_h5.json', $html);

        //        static.meechat.me/cdn/new.mee.chat/dist/manifest.json
        Response::exitMsg($html, CODE_SUCCESS, '', true);
    }

    public function actionManifest($args) {
        if ($args['type'] == 'pc') {
            $startUrl = '/pc.html?pwa=1';
        } else {
            $startUrl = '/h5.html?pwa=1';
        }

        $this->tpl->assign(compact('startUrl'));
        $this->tpl->postfix = '.json';

        if (ENV == ENV_DEV) {
            $env = '[测试]';
        } else if (ENV == ENV_NEW) {
            $env = '[预发布]';
        } else {
            $env = '';
        }

        // 不需要默认头部信息
        $GLOBALS['FORBID_ORIGIN'] = true;
        header("Content-Type: application/json; charset=utf-8");

        $this->tpl->assign(compact('env'));
        $this->tpl->display('manifest', CODE_SUCCESS);
    }

    /**
     * 判断ip，输出首页
     */
    public function actionSw() {
        // 不需要默认头部信息
        $GLOBALS['FORBID_ORIGIN'] = true;

        $path = BASE_DIR . 'dist/sw.js';

        // 增加浏览器缓存
        $filemd5 = md5_file($path);
        $this->_addEtag($filemd5);

        $content = file_get_contents($path);
        header("Content-Type: application/javascript; charset=utf-8");
        Response::exitMsg($content, CODE_SUCCESS, null, true);
    }

    private function _addEtag($etag) {
        // always send headers
        header("Etag: $etag");
        // exit if not modified
        if (@trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
            header("HTTP/1.1 304 Not Modified");
            Response::exitMsg('', CODE_SUCCESS, '304 Not Modified');
        }
    }

    /**
     * 分享跳转
     * @author solu
     * @param $args
     */
    public function actionShare($args) {
        $rules = [
            'group_name' => ['string', 'reg' => '/^[a-z0-9\.]+/i', 'desc' => '群名'],
        ];
        Param::checkParam2($rules, $args);

        $objGroup = new GroupInfo();
        $group = $objGroup->objTable->getRow(['group_name' => $args['group_name']], ['_field' => 'group_id, group_name, group_title']);
        $groupId = $group['group_id'] ?: GroupInfo::OFFICIAL_ID;

        $format = '%s/#/group/%s';
        if (is_mobile_request()) {
            $format = '%s/h5.html#/group/%s';
        }
        $url = sprintf($format, URL_SELF, $groupId);
        Response::exitMsg("<script>location.replace('{$url}')</script>");
    }

    /**
     * 申请群认证
     * @author solu
     * @param $args
     * @return array
     */
    public function actionGroupAuth($args) {
        $rules = [
            'group_id' => ['int', 'desc' => '群id'],
        ];
        Param::checkParam2($rules, $args);

        $userId = User::getUserId();
        if (!(new UserGroup())->isAdmin($args['group_id'], $userId)) {
            Response::error(CODE_NO_PERMITION);
        }

        $serverId = CHAT_SERVER_ID; // 客服id
        $msg =<<<MSG
欢迎申请群组认证，您需要提供如下信息：
1. 项目地址（如：https://vsbet.io/）
2. 代币合约名（如：vsvscontract）
3. 代币名（如：VS）
-------以下内容为可选提供----------
4. Vip合约名（如：vsvsvsvipvip）
5. Vip表名（如：t.player）
6. 等级字段名（如：vip_level）
7. 投注额字段名（如：total_energy)

4~7选项，用于后续在聊天内显示用户vip等功能。
MSG;

        $msg = Utils::encodeRC4($msg);
        $objSession = new Session();
        $sessionId = Session::getPersonSessionId($serverId, $userId);
        try {
            $objSession->sendPersonMsg($serverId, $sessionId, Session::MSG_TYPE_TEXT, $msg, true);
        } catch (Exception $e) {}

        return compact('serverId');
    }

    /**
     * 问题反馈
     * @author solu
     * @param $args
     * @return array
     */
    public function actionTick($args) {
        $rules = [];
        Param::checkParam2($rules, $args);

        $userId = User::getUserId();
        $serverId = CHAT_SERVER_ID; // 客服id
        $msg =<<<MSG
Hi，请问您遇到了什么问题？
MSG;

        $msg = Utils::encodeRC4($msg);
        $objSession = new Session();
        $sessionId = Session::getPersonSessionId($serverId, $userId);
        try {
            $objSession->sendPersonMsg($serverId, $sessionId, Session::MSG_TYPE_TEXT, $msg, true);
        } catch (Exception $e) {}

        return compact('serverId');
    }
}

