package com.common.mapper;


import com.common.entity.DeviceUnknown;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.time.LocalDateTime;

@Mapper
public interface DeviceUnknownMapper {

    /**
     * 插入设备记录
     * @param device 设备对象
     * @return 影响行数
     */
    int insert(DeviceUnknown device);

    /**
     * 批量插入设备记录
     * @param devices 设备列表
     * @return 影响行数
     */
    int batchInsert(@Param("devices") List<DeviceUnknown> devices);

    /**
     * 根据ID查询设备
     * @param id 设备ID
     * @return 设备对象
     */
    DeviceUnknown selectById(@Param("id") Long id);

    /**
     * 根据IP查询设备
     * @param deviceIp 设备IP
     * @return 设备列表
     */
    List<DeviceUnknown> selectByIp(@Param("deviceIp") String deviceIp);

    /**
     * 根据组织ID查询设备
     * @param organizationId 组织ID
     * @return 设备列表
     */
    List<DeviceUnknown> selectByOrganizationId(@Param("organizationId") Integer organizationId);

    /**
     * 查询所有设备
     * @return 设备列表
     */
    List<DeviceUnknown> selectAll();

    /**
     * 分页查询设备
     * @param offset 偏移量
     * @param limit 每页数量
     * @return 设备列表
     */
    List<DeviceUnknown> selectPage(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 根据条件查询设备
     * @param device 查询条件
     * @return 设备列表
     */
    List<DeviceUnknown> selectByCondition(DeviceUnknown device);

    /**
     * 根据ID更新设备信息
     * @param device 设备对象
     * @return 影响行数
     */
    int updateById(DeviceUnknown device);

    /**
     * 更新最后发现时间
     * @param id 设备ID
     * @param lastTime 最后发现时间
     * @return 影响行数
     */
    int updateLastTime(@Param("id") Long id, @Param("lastTime") LocalDateTime lastTime);

    /**
     * 根据ID删除设备
     * @param id 设备ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据组织ID删除设备
     * @param organizationId 组织ID
     * @return 影响行数
     */
    int deleteByOrganizationId(@Param("organizationId") Integer organizationId);

    /**
     * 统计设备数量
     * @return 设备总数
     */
    Long count();

    /**
     * 根据条件统计设备数量
     * @param device 查询条件
     * @return 设备数量
     */
    Long countByCondition(DeviceUnknown device);
}