package com.fs.app.controller;


import cn.hutool.json.JSONUtil;
import com.fs.common.core.controller.BaseController;
import com.fs.common.core.domain.R;
import com.fs.course.config.RedPacketConfig;
import com.fs.course.service.IFsCourseRedPacketLogService;
import com.fs.his.param.WxSendRedPacketParam;
import com.fs.sop.service.ISopUserLogsInfoService;
import com.fs.store.domain.FsStoreOrder;
import com.fs.store.domain.FsUser;
import com.fs.store.enums.*;
import com.fs.store.service.*;
import com.fs.system.service.ISysConfigService;
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.notify.WxPayTransferBatchesNotifyV3Result;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Synchronized;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;

@Api("微信支付接口")
@RestController
@RequestMapping("/app/wxpay")
public class WxPayController {

    protected final Logger logger = LoggerFactory.getLogger(BaseController.class);

    @Autowired
    private WxPayService wxPayService;
    @Autowired
    private IFsStoreOrderService orderService;
    @Autowired
    private IFsStoreOrderStatusService orderStatusService;
    @Autowired
    private IFsUserBillService billService;
    @Autowired
    private IFsUserService userService;
    @Autowired
    private ApplicationEventPublisher publisher;
    @Autowired
    private IFsStorePaymentService storePaymentService;

    @Autowired
    private IFsCourseRedPacketLogService redPacketLogService;
    @Autowired
    private ISysConfigService configService;
    @Autowired
    private ISopUserLogsInfoService iSopUserLogsInfoService;

    /**
     * 微信回调
     * 回调接口代码内部自动校验结果签名和业务代码
     * @param request
     * @return
     * @throws Exception
     */
    @ApiOperation("微信回调")
    @PostMapping("/wxPayNotify")
    @Transactional
    public String wxPayNotify(HttpServletRequest request) throws Exception {

        try {
            String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
            WxPayOrderNotifyResult result = wxPayService.parseOrderNotifyResult(xmlResult);
            System.out.println(result.getReturnCode());
            if("SUCCESS".equals(result.getReturnCode())){
                //订单号
                String outtradeno = result.getOutTradeNo();
                String tradeNo = result.getTransactionId();
                System.out.println(outtradeno);
                System.out.println(tradeNo);
                String[] orderId=outtradeno.split("-");
                switch (orderId[0]){
                    case "store":
                        orderService.payConfirm(1,null,orderId[1], outtradeno,tradeNo,null);
                        break;
                    case "store_remain":
                        orderService.payRemainConfirm( orderId[1], outtradeno,tradeNo,null);
                        break;
                    case "payment":
                        storePaymentService.payConfirm(orderId[1], outtradeno,tradeNo,null);
                        break;
                }
                return WxPayNotifyResponse.success("");
            }else{
                return WxPayNotifyResponse.fail("");
            }

        } catch (Exception e) {
            logger.error("微信回调结果异常,异常原因{}", e.getMessage());
            return WxPayNotifyResponse.fail(e.getMessage());
        }
    }

    @PostMapping( "/TransferNotify")
    public String TransferNotify(@RequestBody String notifyData, HttpServletRequest request, HttpServletResponse response) throws Exception {
        return storePaymentService.transferNotify(notifyData,request);
    }


    @PostMapping( "/v3TransferNotify")
    public String v3TransferNotify(@RequestBody String notifyData,HttpServletRequest request, HttpServletResponse response) throws Exception {
        return storePaymentService.v3TransferNotify(notifyData,request);
    }


}
