package com.qaup.system.service;

import java.util.Date;
import java.util.List;
import com.qaup.system.domain.SysVehicleLocation;
import com.qaup.system.domain.vo.VehicleTrajectoryVO;
import com.qaup.system.domain.vo.VehicleLocationPlaybackVO;
import com.qaup.system.domain.vo.TrajectoryStatistics;
import com.qaup.system.domain.dto.TrajectoryQueryRequest;

/**
 * 车辆运动信息Service接口
 * 
 * @author qaup
 * @date 2025-01-16
 */
public interface ISysVehicleLocationService 
{
    /**
     * 查询车辆运动信息列表
     * 
     * @param sysVehicleLocation 车辆运动信息
     * @return 车辆运动信息集合
     */
    public List<SysVehicleLocation> selectSysVehicleLocationList(SysVehicleLocation sysVehicleLocation);

    /**
     * 根据车辆ID查询车辆运动信息
     * 
     * @param vehicleId 车辆ID
     * @return 车辆运动信息列表
     */
    public List<SysVehicleLocation> selectSysVehicleLocationByVehicleId(Long vehicleId);

    /**
     * 根据车牌号查询车辆运动信息
     * 
     * @param licensePlate 车牌号
     * @return 车辆运动信息列表
     */
    public List<SysVehicleLocation> selectSysVehicleLocationByLicensePlate(String licensePlate);

    /**
     * 查询车辆最新位置信息
     * 
     * @param vehicleId 车辆ID
     * @return 车辆运动信息
     */
    public SysVehicleLocation selectLatestSysVehicleLocationByVehicleId(Long vehicleId);

    /**
     * 根据车牌号查询车辆最新位置信息
     *
     * @param licensePlate 车牌号
     * @return 车辆运动信息
     */
    public SysVehicleLocation selectLatestSysVehicleLocationByLicensePlate(String licensePlate);

    /**
     * 获取车辆轨迹数据
     *
     * @param vehicleId 车辆ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param simplified 是否简化数据
     * @param maxPoints 最大轨迹点数量
     * @return 车辆轨迹数据
     */
    public VehicleTrajectoryVO getVehicleTrajectory(Long vehicleId, Date startTime, Date endTime,
                                                   Boolean simplified, Integer maxPoints);

    /**
     * 批量获取多车辆轨迹数据
     *
     * @param request 轨迹查询请求
     * @return 车辆轨迹数据列表
     */
    public List<VehicleTrajectoryVO> getBatchVehicleTrajectory(TrajectoryQueryRequest request);

    /**
     * 获取轨迹回放数据
     *
     * @param vehicleId 车辆ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param intervalSeconds 时间间隔(秒)
     * @return 轨迹回放数据列表
     */
    public List<VehicleLocationPlaybackVO> getTrajectoryPlaybackData(Long vehicleId, Date startTime,
                                                                    Date endTime, Integer intervalSeconds);

    /**
     * 获取车辆在指定区域内的轨迹
     *
     * @param vehicleId 车辆ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param areaWkt 区域WKT格式字符串
     * @return 车辆轨迹数据
     */
    public VehicleTrajectoryVO getVehicleTrajectoryInArea(Long vehicleId, Date startTime, Date endTime,
                                                         String areaWkt);

    /**
     * 获取轨迹统计信息
     *
     * @param vehicleId 车辆ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 轨迹统计信息
     */
    public TrajectoryStatistics getTrajectoryStatistics(Long vehicleId, Date startTime, Date endTime);
}