package com.ruoyi.jarvis.service;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.jarvis.domain.ErpGoofishOrder;
import com.ruoyi.jarvis.domain.ErpGoofishOrderEventLog;
import com.ruoyi.jarvis.domain.ErpGoofishOrderEventLogQuery;
import com.ruoyi.jarvis.dto.GoofishShipPreviewVo;
import com.ruoyi.jarvis.dto.GoofishRrsLogisticsStatsVo;

import java.util.List;

public interface IErpGoofishOrderService {

    void publishOrProcessNotify(String appid, Long timestamp, JSONObject body);

    /**
     * MQ 消费者或线程池：写库、拉详情、关联京东单、同步运单、尝试发货
     */
    void asyncPipelineAfterNotify(String appid, JSONObject notifyBody);

    /** 日日顺 + 关联京东出库统计（侧边栏）：已出库（去重运单口径）/待出库 */
    GoofishRrsLogisticsStatsVo selectRrsJdLinkedLogisticsStats();

    List<ErpGoofishOrder> selectList(ErpGoofishOrder query);

    ErpGoofishOrder selectById(Long id);

    int pullOrdersForAppKey(String appKey, int lookbackHours);

    int pullAllEnabled(int lookbackHours);

    /** 按配置的起始天数 + 时间分段，尽量拉全历史订单（update_time） */
    int pullOrdersForAppKeyFullHistory(String appKey);

    int pullAllEnabledFullHistory();

    void refreshDetail(Long id);

    /**
     * 发货预览：闲鱼订单收件串 vs 即将提交开放平台地址（可与京东快照比对）。
     */
    GoofishShipPreviewVo shipPreview(Long id);

    void retryShip(Long id);

    int syncWaybillAndTryShipBatch(int limit);

    void applyListOrNotifyItem(String appKey, JSONObject item, String lastNotifyJson);

    /**
     * 京东单物流扫描已得到运单号并写入 Redis 后调用：同步到闲鱼单并尝试开放平台发货。
     */
    void notifyJdWaybillReady(Long jdOrderId);

    /** 京东物流服务在写 Redis / 企微货主推送后、触发闲鱼同步前记一笔（source=JD_LOGISTICS_PUSH）。 */
    void traceJdLogisticsPushForGoofish(Long jdOrderId, String waybillNo, String summary);

    /** 是否存在关联本京东单的闲管家订单（用于物流企微走闲鱼自建应用）。 */
    boolean hasLinkedGoofishOrder(Long jdOrderId);

    /** 订单状态 / 物流 / 发货 变更日志（新→旧） */
    List<ErpGoofishOrderEventLog> listEventLogsByOrderId(Long orderId);

    /** 全表分页检索（排查用，配合 PageHelper） */
    List<ErpGoofishOrderEventLog> selectEventLogList(ErpGoofishOrderEventLogQuery query);
}
