package com.kym.miniapp.controller;


import com.kym.common.annotation.ApiLog;
import com.kym.common.annotation.SysLog;
import com.kym.common.utils.wx.WxPbUtil;
import com.kym.service.wechat.WeixinMPService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.io.PrintWriter;


@Controller
@RequestMapping("wx")
@Slf4j
public class WeixinMPController {

    private final WeixinMPService weixinMPService;

    public WeixinMPController(WeixinMPService weixinMPService) {
        this.weixinMPService = weixinMPService;
    }

    /**
     * 消息通知（订阅、用户消息）
     *
     * @param request
     */

    @PostMapping(value = "notify", produces = MediaType.TEXT_XML_VALUE)
    @ApiLog(value = "微信公众号服务器推送消息", ignoreParams = true)
    public void handleMessage(HttpServletRequest request, HttpServletResponse response) {
        weixinMPService.handleWxMPNotify(request, response);
    }


    /*


     */

    /**
     * 微信服务器token验证
     */
//    @GetMapping(value = "notify")
//    @SysLog("微信服务器token验证")
//    public void checkSign(HttpServletResponse response, String signature, String timestamp, String nonce, String echostr) {
//        String responseVal = echostr;
//        try {
//
//            boolean resp = WxPbUtil.checkSign(signature, timestamp, nonce);
//            if (!resp) {
//                responseVal = "failure";
//                log.error("wxpb check sign ERR!!!!");
//            }
//        } catch (Exception e) {
//            responseVal = "failure";
//        } finally {
//            try {
//                PrintWriter writer = response.getWriter();
//                writer.print(responseVal);
//                writer.flush();
//                writer.close();
//            } catch (Exception e) {
//                log.error(e.getMessage(), e);
//            }
//        }
//    }

//    @GetMapping(value = "/test")
//    public void test() throws WxErrorException {
//        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
//                .toUser("oK-oR5gAn9hrYNim4x64l4kzmMXs")
//                .templateId("SjszYYiHcN-GaEeZTKJsCcB6ACxYJWfTddkSywf1q1g")
//                .url("")
//                .build();
//        templateMessage.addData(new WxMpTemplateData("character_string2.DATA", "000001"));
//        templateMessage.addData(new WxMpTemplateData("thing9.DATA}", "测试站点"));
//        templateMessage.addData(new WxMpTemplateData("character_string3.DATA", "编号001"));
//        templateMessage.addData(new WxMpTemplateData("time4.DATA", "2022-12-01 19:30:00"));
//        wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
//
//    }

}
