package com.yami.shop.platform.controller.hb;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yami.shop.bean.model.Order;
import com.yami.shop.common.util.hb.HBR;
import com.yami.shop.service.OrderService;
import com.yami.shop.service.hb.IHBOrderService;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 海博-订单信息管理
 *
 * @author fubojin
 * @version 1.0.0
 * @since 2025-09-01
 */
@Slf4j
@RestController
@RequestMapping("/hb/order")
@AllArgsConstructor
@CrossOrigin
public class HBOrderController {

    private final IHBOrderService orderService;
    private final OrderService orderServicel;

    /**
     * 海博订单创建接口-推送接口
     *
     * @param orderNumber 订单单号
     * @return 前台类目响应
     */
    @PostMapping("/createOrderAsync")
    public String addGoods(String orderNumber) {
        log.info("海博新增订单{}", orderNumber);
//        //查询订单 ID>1354的
//        List<Order> orders = orderServicel.list(new LambdaQueryWrapper<Order>()
//                .eq(Order::getIsPayed, 1)
//                .gt(Order::getOrderId, 1354)
//                .ne(Order::getActualTotal, 0.00)
//        );
//        for (Order order : orders) {
//            orderService.createOrderAsync(order.getOrderNumber());
//        }

        return orderService.createOrderAsync(orderNumber);
    }

    /**
     * 订单配送-回调
     *
     * @param HBRequest 修改订单配送请求参数
     * @return 订单响应
     */
    @PostMapping("/delivery")
    public HBR delivery(@RequestBody JSONObject HBRequest) {
        log.info("海博订单配送{}", HBRequest);
        return null;
    }

    /**
     * 海博订单完成-回调
     *
     * @param HBRequest 海博订单完成请求参数
     */
    @PostMapping("/completed")
    public HBR completed(@RequestBody JSONObject HBRequest) {
        log.info("海博订单完成{}", HBRequest);
        return null;
    }

    /**
     * 海博查询订单详情-回调
     *
     * @param HBRequest 海博查询订单详情请求参数
     */
    @PostMapping("/details")
    public HBR details(@RequestBody JSONObject HBRequest) {
        log.info("进入海博查询订单详情接口{}", HBRequest);
        return orderService.details(HBRequest);
    }

    /**
     * 海博订单-查询订单详情-回调
     *
     * @param HBRequest 海博修改订单请求参数
     * @return 订单响应
     */
    @PostMapping("/info")
    public HBR goodsInfo(@RequestBody JSONObject HBRequest) {
        log.info("海博修改订单请求参数{}", HBRequest);
        return null;
    }

    /**
     * 订单状态变更接口-回调
     *
     * @param hBRequest 订单状态变更接口请求参数
     * @return 订单响应
     */
    @PostMapping("/updateStatus")
    public HBR updateStatus(@RequestBody JSONObject hBRequest) {
        log.info("海博修改订单状态{}", hBRequest);
        orderService.orderStatusNotify(hBRequest);
        JSONObject responseJson = new JSONObject();
        responseJson.put("result", true);
        return HBR.success(responseJson);
    }

    /**
     * 海博订单创建结果通知-回调
     *
     * @param hBRequest 海博订单创建结果通知请求参数
     * @return 订单响应
     */
    @PostMapping("/createOrderResult")
    public HBR createOrderResult(@RequestBody JSONObject hBRequest) {
        log.info("海博订单创建结果通知{}", hBRequest);
        return orderService.createOrderResult(hBRequest);
    }

    /**
     * 海博订单物流状态-回调
     *
     * @param hBRequest 海博订单物流状态请求参数
     * @return 订单响应
     */
    @PostMapping("/logisticsStatus")
    public HBR logisticsStatus(@RequestBody JSONObject hBRequest) {
        log.info("海博订单物流状态通知{}", hBRequest);
        orderService.updateLogisticStatus(hBRequest);
        return HBR.success();
    }

    /**
     * 订单状态变更通知（下行）
     */
    @PostMapping("/orderStatusNotify")
    public HBR orderStatusNotify(@RequestBody JSONObject hBRequest) {
        orderService.orderStatusNotify(hBRequest);
        log.info("海博订单状态变更通知{}", hBRequest);
        JSONObject responseJson = new JSONObject();
        responseJson.put("result", true);
        return HBR.success(responseJson);
    }


    /**
     * 骑手经纬度接口
     *
     * @param hBRequest 海博骑手经纬度请求参数
     * @return 订单响应
     */
    @PostMapping("/riderLocation")
    public HBR riderLocation(@RequestBody JSONObject hBRequest) {
        log.info("海博骑手经纬度{}", hBRequest);
        orderService.riderLocation(hBRequest);
        return HBR.success();
    }

    /**
     * 订单状态变更接口(上行)
     * 海博订单修改状态接口-推送接口
     *
     * @param channelOrderId 海博订单请求参数
     *                       订单类型 （20：订单已接单 30：订单待配送 60：订单已取消 80：订单已完成）
     * @return 订单详情响应
     */
    @PostMapping("/changeOrderStatus")
    public HBR changeOrderStatus(String channelOrderId, Integer type) {
        log.info("海博订单修改状态{}", channelOrderId);
        return HBR.success(orderService.changeOrderStatus(channelOrderId, type));
    }

    /**
     * 订单-发货消息（下行）
     *
     * @param hBRequest 海博订单发货消息请求参数
     */
    @PostMapping("/deliveryMsg")
    public HBR deliveryMsg(@RequestBody JSONObject hBRequest) {
        log.info("海博订单发货消息{}", hBRequest);
        orderService.deliveryMsg(hBRequest);
        return HBR.success();
    }



    /**
     * 订单-商家转自送
     *
     * @param hBRequest 海博订单发货消息请求参数
     */
    @PostMapping("/merchantToSelf")
    public HBR merchantToSelf(@RequestBody JSONObject hBRequest) {
        log.info("商家转自送{}", hBRequest);
        orderService.merchantToSelf(hBRequest);
        return HBR.success();
    }

}
