package com.ruoyi.xq.manager;

import com.ruoyi.xq.domain.VipPrice;
import com.ruoyi.xq.dto.app.pay.ConsumeResp;
import com.ruoyi.xq.enums.common.OrderTypeEnum;
import com.ruoyi.xq.enums.pay.PlatformTypeEnum;
import com.ruoyi.xq.mq.AmqpProducer;
import com.ruoyi.xq.mq.handle.dto.CalculateSalesHandleDTO;
import com.ruoyi.xq.service.UserExtendService;
import com.ruoyi.xq.service.VipOrderService;
import com.ruoyi.xq.service.VipPriceService;
import com.ruoyi.xq.service.WxTransOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@Slf4j
public class PayManager {
    @Autowired
    private VipOrderService vipOrderService;
    @Autowired
    private UserExtendService userExtendService;
    @Autowired
    private AmqpProducer amqpProducer;
    @Autowired
    private VipPriceService vipPriceService;
    @Autowired
    private WxTransOrderService wxTransOrderService;


    public void callBack(String orderNo, Map<String,String> params, String appId, PlatformTypeEnum payTypeEnum){
        OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
        if(orderTypeEnum == null){
            log.error("订单类型有误！orderNo={}",orderNo);
            return;
        }
        switch (orderTypeEnum){
            case VIP:
                ConsumeResp vipResp = vipOrderService.doSuccess(orderNo,params,appId,payTypeEnum);
                if(vipResp.isSuccess()){
                    try {
                        // 用户消费统计
                        userExtendService.incsConsumeTotal(vipResp.getUserId(), vipResp.getPrice());
                    }catch (Exception e){
                        log.error("用户VIP消费统计",e);
                    }
                    try {
                        if(vipResp.getConsumerId() != null){
                            CalculateSalesHandleDTO dto = new CalculateSalesHandleDTO();
                            dto.setConsumerLogId(vipResp.getConsumerId());
                            amqpProducer.sendCommonMq(dto);
                        }
                    }catch (Exception e){
                        log.error("RabbitMq 发送失败, 充值分销流程流转失败！",e);
                    }
                    try {
                        if(vipResp.getVipId() != null){
                            VipPrice vipPrice = vipPriceService.getById(vipResp.getVipId());
                            if(vipPrice != null && vipPrice.getGiveWxTransNum() > 0){
                            }
                        }
                    }catch (Exception e){
                        log.error("开通会员赠送次数失败",e);
                    }
                }
                break;
            case WX_TRANS:
                ConsumeResp consumeResp = wxTransOrderService.doSuccess(orderNo, params, appId, payTypeEnum);
                if(consumeResp.isSuccess()){
                    try {
                        // 用户消费统计
                        userExtendService.incsConsumeTotal(consumeResp.getUserId(), consumeResp.getPrice());
                    }catch (Exception e){
                        log.error("用户微信交换次数消费统计",e);
                    }
                }
                break;
            default:
                break;
        }
    }
}
