"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OfficialController = void 0;
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const official_service_1 = require("./official.service");
const getQrCode_dto_1 = require("./dto/getQrCode.dto");
const getQrSceneStr_dto_1 = require("./dto/getQrSceneStr.dto");
let OfficialController = class OfficialController {
    constructor(officialService) {
        this.officialService = officialService;
    }
    async notify(req, query, body) {
        console.log('get 通知>>>', query, body);
        const result = await this.officialService.verify(query.signature, query.nonce, query.timestamp);
        return result ? query.echostr : '';
    }
    async notifyPost(req, query, xmlData, res) {
        const { xml } = xmlData;
        console.log('xml: ', xml);
        if (xml.msgtype[0] == 'event') {
            if (xml.event[0] == 'VIEW' || xml.event[0] == 'CLICK') {
                return res.status(200).send('');
            }
            if (xml.event[0] == 'SCAN') {
                console.log('扫码');
                const sceneStr = xml.eventkey[0];
                if (sceneStr.includes('/')) {
                    this.officialService.scanBindWx(xml.fromusername[0], sceneStr);
                    const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialBindAccountText');
                    return res.status(200).send(xmlMsg);
                }
                this.officialService.scan(xml.fromusername[0], sceneStr);
                const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialScanLoginText');
                return res.status(200).send(xmlMsg);
            }
            if (xml.event[0] == 'subscribe') {
                console.log('订阅', xml.eventkey[0]);
                const sceneStr = xml.eventkey[0].split('qrscene_')[1];
                console.log('sceneStr: ', sceneStr);
                if (!sceneStr) {
                    const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialSubscribeText');
                    return res.status(200).send(xmlMsg);
                }
                if (sceneStr.includes('/')) {
                    this.officialService.scanBindWx(xml.fromusername[0], sceneStr);
                    const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialBindAccountText');
                    return res.status(200).send(xmlMsg);
                }
                this.officialService.scan(xml.fromusername[0], sceneStr);
                const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialSubscribeText');
                return res.status(200).send(xmlMsg);
            }
            if (xml.event[0] == 'unsubscribe') {
                return res.status(200).send('');
            }
        }
        if (xml.msgtype[0] == 'text') {
            const aotoPlayMsg = await this.officialService.aotoPlay(xml.content[0]);
            const xmlMsg = await this.officialService.genXmlMsg(xml, aotoPlayMsg);
            return res.status(200).send(xmlMsg);
        }
        return 'success';
    }
    async getQRSceneStr(body) {
        return this.officialService.getQRSceneStr(body);
    }
    async getQRSceneStrByBind(req) {
        return this.officialService.getQRSceneStrByBind(req);
    }
    async getQRCode(query) {
        if (process.env.ISDEV === 'TRUE')
            return '';
        const ticket = await this.officialService.getQRCodeTicket(query.sceneStr);
        return `https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=${encodeURIComponent(ticket)}`;
    }
    async loginBySceneStr(req, body) {
        return this.officialService.loginBySceneStr(req, body.sceneStr);
    }
    async bindWxBySceneStr(req, body) {
        return this.officialService.bindWxBySceneStr(req, body.sceneStr);
    }
    async getRedirectUrl(body) {
        return this.officialService.getRedirectUrl(body.url);
    }
    async getJsapiTicket(body) {
        return this.officialService.getJsapiTicket(body.url);
    }
    async loginByCode(req, body) {
        return this.officialService.loginByCode(req, body.code);
    }
};
__decorate([
    (0, common_1.Get)('notify'),
    (0, swagger_1.ApiOperation)({ summary: '公众号通知接口GET' }),
    __param(0, (0, common_1.Req)()),
    __param(1, (0, common_1.Query)()),
    __param(2, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, Object, Object]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "notify", null);
__decorate([
    (0, common_1.Post)('notify'),
    (0, swagger_1.ApiOperation)({ summary: '公众号通知接口POST' }),
    __param(0, (0, common_1.Req)()),
    __param(1, (0, common_1.Query)()),
    __param(2, (0, common_1.Body)()),
    __param(3, (0, common_1.Res)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, Object, Object, Object]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "notifyPost", null);
__decorate([
    (0, common_1.Post)('getQRSceneStr'),
    (0, swagger_1.ApiOperation)({ summary: '获取登录二维码sceneStr' }),
    __param(0, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [getQrSceneStr_dto_1.GetQrSceneStrDto]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "getQRSceneStr", null);
__decorate([
    (0, common_1.Post)('getQRSceneStrByBind'),
    (0, swagger_1.ApiOperation)({ summary: '获取绑定二维码的sceneStr' }),
    (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
    __param(0, (0, common_1.Req)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "getQRSceneStrByBind", null);
__decorate([
    (0, common_1.Get)('getQRCode'),
    (0, swagger_1.ApiOperation)({ summary: '获取二维码' }),
    __param(0, (0, common_1.Query)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [getQrCode_dto_1.GetQrCodeDto]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "getQRCode", null);
__decorate([
    (0, common_1.Post)('loginBySceneStr'),
    (0, swagger_1.ApiOperation)({ summary: '扫码登录轮询查询' }),
    __param(0, (0, common_1.Req)()),
    __param(1, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, getQrCode_dto_1.GetQrCodeDto]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "loginBySceneStr", null);
__decorate([
    (0, common_1.Post)('bindWxBySceneStr'),
    (0, swagger_1.ApiOperation)({ summary: '扫码绑定轮询查询' }),
    (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
    __param(0, (0, common_1.Req)()),
    __param(1, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, getQrCode_dto_1.GetQrCodeDto]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "bindWxBySceneStr", null);
__decorate([
    (0, common_1.Post)('getRedirectUrl'),
    (0, swagger_1.ApiOperation)({ summary: '获取登录跳转地址' }),
    __param(0, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "getRedirectUrl", null);
__decorate([
    (0, common_1.Post)('getJsapiTicket'),
    (0, swagger_1.ApiOperation)({ summary: '获取注册配置' }),
    __param(0, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "getJsapiTicket", null);
__decorate([
    (0, common_1.Post)('loginByCode'),
    (0, swagger_1.ApiOperation)({ summary: '公众号静默登录' }),
    __param(0, (0, common_1.Req)()),
    __param(1, (0, common_1.Body)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, Object]),
    __metadata("design:returntype", Promise)
], OfficialController.prototype, "loginByCode", null);
OfficialController = __decorate([
    (0, swagger_1.ApiTags)('official'),
    (0, common_1.Controller)('official'),
    __metadata("design:paramtypes", [official_service_1.OfficialService])
], OfficialController);
exports.OfficialController = OfficialController;
