package com.erp.logistics.service.adapter;

import com.erp.logistics.entity.LogisticsTrace;
import com.erp.logistics.entity.WaybillStatus;

import java.util.List;
import java.util.Map;

/**
 * 物流商适配器接口
 * 策略模式：每种物流商实现自己的查询和解析逻辑
 */
public interface CarrierAdapter {

    /**
     * 获取物流商编码
     */
    String getCarrierCode();

    /**
     * 获取物流商名称
     */
    String getCarrierName();

    /**
     * 从运单号中识别物流商（用于自动识别）
     */
    boolean match(String waybillNo);

    /**
     * 查询物流轨迹
     * @param waybillNo 运单号
     * @return 轨迹列表
     */
    List<LogisticsTrace> queryTraces(String waybillNo);

    /**
     * 解析回调数据
     * @param rawData 原始回调数据
     * @return 解析后的运单状态和轨迹
     */
    CallbackResult parseCallback(Map<String, Object> rawData);

    /**
     * 验证回调签名
     * @param data 回调数据
     * @param sign 签名
     * @return 是否有效
     */
    boolean verifySign(Map<String, Object> data, String sign);

    /**
     * 回调结果
     */
    record CallbackResult(
            String waybillNo,
            WaybillStatus status,
            List<LogisticsTrace> traces
    ) {}
}
