package com.pig4cloud.pig.marketing.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pig.marketing.api.dto.mongo.PageDeviceInfoDTO;
import com.pig4cloud.pig.marketing.api.dto.mongo.PageMessageDTO;
import com.pig4cloud.pig.marketing.api.dto.mongo.SaveDeviceInfoDTO;
import com.pig4cloud.pig.marketing.api.dto.mongo.SaveTcpMessageDTO;
import com.pig4cloud.pig.marketing.api.dto.mongo.UserRegionStatisticsDTO;
import com.pig4cloud.pig.marketing.api.entity.mongo.Device;
import com.pig4cloud.pig.marketing.api.entity.mongo.Message;
import com.pig4cloud.pig.marketing.api.vo.mongo.PageDeviceInfoVO;
import com.pig4cloud.pig.marketing.api.vo.mongo.UserStatisticsVO;
import com.pig4cloud.pig.marketing.api.vo.mongo.UserRegionStatisticsVO;
import com.pig4cloud.pig.marketing.api.vo.mongo.OnlineUserVO;

/**
 * @author: lwh
 * @date: 2025-08-28
 * @description: TCP数据服务
 */

public interface TcpDataService {

	/**
	 * 保存或更新设备信息
	 * @param reqDto 入参
	 * @return 设备信息ID
	 */
	String saveOrUpdateDevice(SaveDeviceInfoDTO reqDto);

	/**
	 * 根据客户端ID查询设备信息
	 * @param clientID 客户端ID
	 * @return 设备信息
	 */
	Device getDeviceByClientID(String clientID);

	/**
	 * 分页查询设备信息
	 * @param reqDto 入参
	 * @return 设备信息列表
	 */
	Page<PageDeviceInfoVO> pageDeviceInfo(PageDeviceInfoDTO reqDto);


	/******************************************* 消息 *******************************************/
	/**
	 * 保存上报数据
	 * @param reqDto 入参
	 * @return 数据ID
	 */
	String saveMessage(SaveTcpMessageDTO reqDto);

	/**
	 * 根据ID查询数据详情
	 * @param id 数据ID
	 * @return 数据详情
	 */
	Message getMessagesById(String id);

	/**
	 * 分页查询数据列表
	 * @param reqDto 入参
	 * @return 数据列表
	 */
	Page<Message> pageMsgInfo(PageMessageDTO reqDto);

	/**
	 * 统计用户数
	 * @return 用户统计信息
	 */
	UserStatisticsVO getUserStatistics();

	/**
	 * 查询在线用户列表
	 * @return 在线用户列表
	 */
	java.util.List<OnlineUserVO> getOnlineUsers();

	/**
	 * 用户地区统计
	 * @param reqDto 查询条件
	 * @return 用户地区统计信息
	 */
	UserRegionStatisticsVO getUserRegionStatistics(UserRegionStatisticsDTO reqDto);
}
