package com.younike.web.core.config;

import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.Map;


/**
 * @author chenpengfei
 */
@Component
@Log4j2
public class DelayedReceiver {

//    @Value("${yxx.order.cancelUrl}")
//    private String yxxOrderCancelUrl;
//
//    /**
//     * 是否自动转达达
//     */
//    @Value("${yxx.order.autoCancel}")
//    private boolean autoCancel;



    @RabbitListener(queues = "delayed.home.order")
    public void process(Message message, Channel channel) {
        String msg = new String(message.getBody());
        log.info("消息内容：" + msg);
//        if (msg.startsWith(YXX_DELIVERY)) {
//            // 优鲜行未接单订单处理
//            if (autoCancel) {
//                log.info("监听优鲜行过期未配送订单（转达达）");
//                dealYxxUnOrder(msg.replace(YXX_DELIVERY, ""));
//           }
//        } else if (msg.startsWith(PREFIX_NO_PAY_ORDER)) {
//            // 待支付订单
//            dealUnPayOrder(msg.replace(PREFIX_NO_PAY_ORDER, ""));
//        } else if (msg.startsWith(PREFIX_NO_ORDER)) {
//            // 未接单订单
//            dealUnOrder(msg.replace(PREFIX_NO_ORDER, ""));
//        } else if (msg.startsWith(PREFIX_TO_BE_UNBOUND)) {
//            // 订单完成后30分钟 隐私号解绑
//            dealUnbound(msg.replace(PREFIX_TO_BE_UNBOUND, ""));
//        }
        try {
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//    /**
//     * 订单完成后30分钟 隐私号解绑
//     */
//    private void dealUnbound(String orderId) {
//        Order order = orderService.findByOrderId(orderId);
//        if (StringUtils.isNotBlank(order.getSubsId())) {
//            APIResult<Boolean> booleanAPIResult = mnsInterface.UnbindSubscription(order.getSubsId(), order.getPrivacyUser());
//            if (booleanAPIResult.getCode().equals(ApiResultCode.Success.getCode())) {
//                log.info("解绑隐私号成功！订单id："+orderId+"，隐私号："+order.getPrivacyUser()+"，关系id："+order.getSubsId());
//            } else {
//                log.error("解绑隐私号失败！订单id："+orderId+"，隐私号："+order.getPrivacyUser()+"，关系id："+order.getSubsId());
//            }
//        }
//    }
//
//    /**
//     * 未接单订单
//     */
//    private void dealUnOrder(String orderId) {
//        Order order = orderService.getById(orderId);
//        // 支付状态
//        OrderRecord payState = orderRecordService.selectOrderRecordByOrderIdAndState(orderId, OrderState.ALREADY_PAY.getCode());
//        // 接单状态
//        OrderRecord orderState = orderRecordService.selectOrderRecordByOrderIdAndState(orderId, OrderState.TACK_ORDER.getCode());
//        if (orderState == null && payState != null) {
//            // 已支付，未接单
//            // 退还优惠券
//            if (StringUtils.isNotBlank(order.getMemberCouponId())) {
//                if (order.getIsExternalCoupon() == 0) {
//                    // 退还优鲜信优惠券
//                    MemberCoupon memberCoupon = memberCouponService.getById(order.getMemberCouponId());
//                    memberCoupon.setUsageTime(null);
//                    memberCoupon.setState(CouponState.UNUSED.getState());
//                    if (!memberCouponService.updateById(memberCoupon)) {
//                        log.error("未接单--订单(" + orderId + ")退还红包失败！");
//                        throw new CustomException("未接单--退还优鲜信优惠券失败");
//                    }
//                } else if (order.getIsExternalCoupon() == 1) {
//                    // 退还优鲜生优惠券
//                    if (!couponUserService.returnCoupon(order.getMemberCouponId())) {
//                        log.error("未接单--订单(" + orderId + ")退还红包失败！");
//                        throw new ApiException("未接单--退还优鲜生优惠券失败");
//                    }
//                }
//            }
//
//            // 2021-9-3 Another 判断 用户是否使用了红包和优金豆，若使用了都需要退还
//            if (memberPayPresenter.returnRedEnvelopePoints(order)) {
//                log.info("未接单--订单(" + orderId + ")退优金豆成功！");
//            } else {
//                log.error("未接单--订单(" + orderId + ")退优金豆失败！");
//                throw new CustomException("取消订单 -- 退还优金豆失败");
//            }
//
//            // 退款
//            if (memberPayPresenter.fullRefund(orderId)) {
//                log.info("未接单--订单(" + orderId + ")退款成功！");
//            } else {
//                log.error("未接单--订单(" + orderId + ")退款失败！");
//                throw new CustomException("未接单订单(" + orderId + ")退款失败！");
//            }
//
//            OrderRecord orderRecord = new OrderRecord();
//            orderRecord.setPreState(order.getOrderState());
//            orderRecord.setOrderId(orderId);
//            orderRecord.setNowState(OrderState.CANCEL.getCode());
//            orderRecordService.save(orderRecord);
//
//            // 更新订单状态
//            order.setOrderState(OrderState.CANCEL.getCode());
//            if (orderService.updateById(order)) {
//                log.info("未接单--取消超时未接单订单 " + orderId);
//            } else {
//                log.error("未接单--订单(" + orderId + ")取消失败！");
//                throw new CustomException("未接单订单(" + orderId + ")取消失败！");
//            }
//        }
//    }
//
//    /**
//     * 待支付订单
//     */
//    private void dealUnPayOrder(String orderId) {
//        Order order = orderService.getById(orderId);
//        if (OrderState.NO_PAY.getCode().equals(order.getOrderState())) {
//            log.info("取消超时未支付订单 " + orderId);
//            order.setCancelType(2);    // 设置 取消方式为 未支付超时取消
//            order.setOrderState(OrderState.CANCEL.getCode());
//            if (orderService.updateById(order)) {
//                log.info("未支付订单(" + orderId + ")取消成功！");
//                OrderRecord orderRecord = new OrderRecord();
//                orderRecord.setPreState(OrderState.NO_PAY.getCode());
//                orderRecord.setOrderId(orderId);
//                orderRecord.setNowState(OrderState.CANCEL.getCode());
//                orderRecordService.save(orderRecord);
//
//                // 退还优惠券
//                if (StringUtils.isNotBlank(order.getMemberCouponId())) {
//                    if (order.getIsExternalCoupon() == 0) {
//                        // 退还优鲜信优惠券
//                        MemberCoupon memberCoupon = memberCouponService.getById(order.getMemberCouponId());
//                        memberCoupon.setUsageTime(null);
//                        memberCoupon.setState(CouponState.UNUSED.getState());
//                        if (!memberCouponService.updateById(memberCoupon)) {
//                            log.error("未接单--订单(" + orderId + ")退还红包失败！");
//                            throw new CustomException("未接单--退还优鲜信优惠券失败");
//                        }
//                    } else if (order.getIsExternalCoupon() == 1) {
//                        // 退还优鲜生优惠券
//                        if (!couponUserService.returnCoupon(order.getMemberCouponId())) {
//                            log.error("未接单--订单(" + orderId + ")退还红包失败！");
//                            throw new ApiException("未接单--退还优鲜生优惠券失败");
//                        }
//                    }
//                }
//
//                // 2021-9-3 Another 判断 用户是否使用了红包和优金豆，若使用了都需要退还
//                if (memberPayPresenter.returnRedEnvelopePoints(order)) {
//                    log.info("未接单--订单(" + orderId + ")退优金豆成功！");
//                } else {
//                    log.error("未接单--订单(" + orderId + ")退优金豆失败！");
//                    throw new CustomException("取消订单 -- 退还优金豆失败");
//                }
//            } else {
//                log.error("未支付订单(" + orderId + ")取消失败！");
//            }
//        }
//    }
//
//    /**
//     * 优鲜行未接单订单处理
//     */
//    private void dealYxxUnOrder(String orderId) {
//        OrderRecord orderRecord = orderRecordService.selectLastestOrderRecord(orderId);
//        if (orderRecord != null && (orderRecord.getNowState().equals(OrderState.ALREADY_PAY.getCode()) ||
//                orderRecord.getNowState().equals(OrderState.TACK_ORDER.getCode()))) {
//            log.warn("取消超时优鲜行超时未接未接订单 " + orderId);
//            // 取消优鲜行订单
//            CancelOrderInfoParam cancelOrderInfoParam = new CancelOrderInfoParam();
//            cancelOrderInfoParam.setOriginOrderNo(orderId);
//            cancelOrderInfoParam.setCancelType("1");
//            Map<String, String> map = SignUtils.getDeliverHeaderParam();
//            String result = HttpClientUtils.executeGet(yxxOrderCancelUrl+"?orderId="+orderId, map);
//            log.info("请求取消优鲜行配送返回结果：" + result);
//            // 解析返回结果
//            JSONObject jsonObject = JSONObject.parseObject(result);
//            String jsonCode = jsonObject.getString("code");
//            if ("200".equals(jsonCode) && jsonObject.getBoolean("result")) {
//                // 新增 骑手端订单成功
//                log.info("请求取消优鲜行配送成功，执行达达派送发单");
//                orderDeliveryTask.deliveryByDada(orderId);
//            } else {
//                log.error("请求取消优鲜行配送失败");
//                throw new CustomException("取消派送单 -- 请求取消优鲜行配送失败");
//            }
//        }
//    }
}
