package cn.van.business.util;

import cn.van.business.enums.ValidCodeConverter;
import cn.van.business.model.jd.OrderRow;
import cn.van.business.repository.OrderRowRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;


/**
 * @author Leo
 * @version 1.0
 * @create 2024/11/29 11:43
 * @description：
 */
@Service
public class OrderUtil {

    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private OrderRowRepository orderRowRepository;
    @Resource
    private WXUtil wxUtil;
    //标记唯一订单行：订单+sku维度的唯一标识
    private static final String ORDER_ROW_KEY = "jd:order:row:";

    /**
     * 手动调用 将订单发送到微信
     */
    @Async("threadPoolTaskExecutor")
    public void orderToWx(OrderRow orderRow, Boolean isAutoFlush) {
        // 获取订单当前状态
        Integer newValidCode = orderRow.getValidCode();
        String oldValidCode = redisTemplate.opsForValue().get(ORDER_ROW_KEY + orderRow.getId());

        // 检查Redis中是否有旧的状态码，没有的话赋予默认值
        Integer lastValidCode = oldValidCode != null ? Integer.parseInt(oldValidCode) : -100;

        // 这里使用了逻辑非(!)操作符来简化条件判断
        if (!isAutoFlush || !lastValidCode.equals(newValidCode)) {
            // 当 isAutoFlush 为 false 或状态确实有变化时，进行消息发送
            String content = getFormattedOrderInfo(orderRow, lastValidCode);
            wxUtil.sendTextMessage(WXUtil.super_admin_wxid, content, 1, WXUtil.super_admin_wxid);
        }

        // 更新 Redis 状态值
        redisTemplate.opsForValue().set(ORDER_ROW_KEY + orderRow.getId(), String.valueOf(orderRow.getValidCode()));

    }

    /**
     * 将数据库订单转化成微信所需要文本
     */
    public String getFormattedOrderInfo(OrderRow orderRow, Integer oldValidCode) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ValidCodeConverter converter = new ValidCodeConverter();
        String orderInfo =
                //+ "订单+sku：" + orderRow.getId() + "\r"
                "订单：" + orderRow.getOrderId() + "  (" + (orderRow.getPlus() == 1 ? "plus" : "非plus") + ")\r" +

                        "状态：" + (converter.getCodeDescription(orderRow.getValidCode())) + "\r"

                        + "名称：" + orderRow.getSkuName() + "\r\n"
                        //+ "商品单价：" + orderRow.getPrice() + "\r"
                        //+ "商品数量：" + orderRow.getSkuNum() + "\r"
                        //+ "商品总价：" + (orderRow.getPrice() * orderRow.getSkuNum()) + "\r"
                        + "计佣金额：" + orderRow.getEstimateCosPrice() + "\r"

                        //+ "金额：" + orderRow.getActualCosPrice() + "\r"
                        + "比例：" + orderRow.getCommissionRate() + "\r"
                        + "佣金：" + orderRow.getEstimateFee() + "\r\n"

                        + "下单：" + formatter.format(orderRow.getOrderTime()) + "\r"
                        + "完成：" + (orderRow.getFinishTime() != null ? formatter.format(orderRow.getFinishTime()) : "未完成") + "\r";
        if (oldValidCode != -100) {
            if (!oldValidCode.equals(orderRow.getValidCode()))
                orderInfo = "从 ：" + (converter.getCodeDescription(oldValidCode)) + "\r变成  " +
                        (converter.getCodeDescription(orderRow.getValidCode())) + "\r\n" + orderInfo;
        }


        return orderInfo;
    }
}
