package com.zc.business.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zc.business.domain.DcCongestedSectionData;
import com.zc.business.domain.DcTrafficMetricsData;
import com.zc.business.domain.DcTrafficSectionData;
import com.zc.business.request.DcTrafficMetricsDataRequest;
import com.zc.business.request.DcTrafficSectionDataRequest;

import java.util.List;

public interface DcTrafficStatisticsService extends IService<DcTrafficSectionData> {

    /**
     * 处理实时接收到的一类交流站设备消息,并将其转换为交通断面统计数据对象并缓存。
     *
     * @param msg 设备发送的JSON格式实时消息
     */
    void processRealtimeOneStopMessage(JSONObject msg);

    /**
     * 根据提供的请求参数获取当前的交通截面数据。
     *
     * @param request 包含获取交通截面所需的所有请求参数的对象。
     * @return DcTrafficSectionData 返回一个包含当前交通截面数据列表。
     */
    List<DcTrafficSectionData> currentSections(DcTrafficSectionDataRequest request);

    /**
     * 根据提供的请求参数获取历史的交通截面数据。
     *
     * @param request 包含获取交通截面所需的所有请求参数的对象。
     * @return DcTrafficSectionData 返回一个包含历史交通截面数据列表。
     */
    List<DcTrafficSectionData> historySections(DcTrafficSectionDataRequest request);

    /**
     * 根据提供的请求参数获取当前的交通指标数据。
     *
     * @param request 包含获取交通指标所需的所有请求参数的对象。
     * @return DcTrafficMetricsData 返回一个包含当前交通指标数据列表。
     */
    List<DcTrafficMetricsData> currentTrafficMetrics(DcTrafficMetricsDataRequest request);


    /**
     * 获取历史交通指标数据列表。
     *
     * @param request 包含获取交通指标所需的所有请求参数的对象。
     * @return 返回符合查询条件的历史交通指标数据列表。
     */
    List<DcTrafficMetricsData> historyTrafficMetrics(DcTrafficMetricsDataRequest request);

    /**
     * 获取当前拥堵路段列表。
     *
     * @param direction 交通方向,指定查询哪个方向的拥堵路段。具体方向的定义根据实际业务而定。
     * @return 返回当前拥堵路段列表。
     */
    List<DcCongestedSectionData> currentCongestedSection(Byte direction);
}