package com.seer.teach.iot.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.seer.teach.iot.common.dto.CityPercentageDTO;
import com.seer.teach.iot.common.req.AuthReq;
import com.seer.teach.iot.common.resp.LoginResp;
import com.seer.teach.iot.module.entity.DevicesEntity;

import jakarta.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备服务接口，定义了设备信息管理的业务方法
 * </p>
 *
 * @author Captain
 * @since 2025-05-19
 */
public interface DevicesService extends IService<DevicesEntity> {

    /**
     * 根据设备唯一标识查询设备的完整实体信息。
     *
     * @param device 设备唯一标识
     * @return {@link DevicesEntity} 实体对象，如果不存在则返回 {@code null}
     */
    DevicesEntity getDeviceEntityByDevice(String device);

    /**
     * 统计各个设备型号的设备数量
     *
     * @return 返回设备型号统计结果列表，每个元素包含model_id和对应的设备数量count
     */
    List<Map<String, Object>> countDevicesByModel();

    /**
     * 根据城市ID列表查询城市百分比数据
     *
     * @param cityIds 城市ID列表，用于筛选需要查询的城市数据
     * @return 返回对应城市ID的百分比数据列表，每个元素包含城市ID和相应的百分比信息
     */
    List<CityPercentageDTO> selectCityPercentages(List<Integer> cityIds);

    /**
     * 分页查询设备列表
     *
     * @param pageParm
     * @return
     */
    IPage<DevicesEntity> pageList(Page<DevicesEntity> pageParm, Wrapper<DevicesEntity> wrapper);

    LoginResp login(AuthReq params, HttpServletRequest request, String modelName, Integer versionCode);

}