package com.common.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.common.entity.SyslogNonNormalMessage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 非标日志Mapper接口
 */
@Mapper
public interface SyslogNonNormalMessageMapper extends BaseMapper<SyslogNonNormalMessage> {

    /**
     * 批量插入非标日志
     * @param list 日志列表
     * @return 插入数量
     */
    int batchInsert(@Param("list") List<SyslogNonNormalMessage> list);

    /**
     * 根据时间段查询非标日志
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 日志列表
     */
    @Select("SELECT * FROM syslog_non_normal_message WHERE log_time BETWEEN #{startTime} AND #{endTime} AND del_flag = '0'")
    List<SyslogNonNormalMessage> findByTimeRange(@Param("startTime") LocalDateTime startTime,
                                                 @Param("endTime") LocalDateTime endTime);

    /**
     * 根据设备ID和状态统计
     * @param deviceId 设备ID
     * @param ruleResult 规则结果
     * @return 统计结果
     */
    @Select("SELECT COUNT(*) as count FROM syslog_non_normal_message " +
            "WHERE device_id = #{deviceId} AND rule_result = #{ruleResult} AND del_flag = '0'")
    Map<String, Object> countByDeviceAndResult(@Param("deviceId") Integer deviceId,
                                               @Param("ruleResult") String ruleResult);

    /**
     * 逻辑删除非标日志
     * @param id 日志ID
     * @return 更新数量
     */
    @Select("UPDATE syslog_non_normal_message SET del_flag = '1', update_time = NOW() WHERE id = #{id}")
    int logicalDelete(@Param("id") String id);



    /**
     * 根据ID和创建时间批量查询非标日志
     * @param ids ID列表
     * @param createdAts 创建时间列表
     * @return 非标日志列表
     */
    List<SyslogNonNormalMessage> getMessagesByIdsAndCreatedAts(
            @Param("ids") List<String> ids,
            @Param("createdAts") List<String> createdAts);

    /**
     * 根据ID列表批量查询非标日志
     * @param ids ID列表
     * @return 非标日志列表
     */
    List<SyslogNonNormalMessage> getMessagesByIds(@Param("ids") List<String> ids);

    /**
     * 批量更新del_flag字段
     * @param messages 需要更新的非标日志列表
     * @return 更新记录数
     */
    int updateBatchDelFlag(@Param("messages") List<SyslogNonNormalMessage> messages);

    /**
     * 批量更新记录
     * @param messages 需要更新的非标日志列表
     * @return 更新记录数
     */
    int updateBatch(@Param("messages") List<SyslogNonNormalMessage> messages);
}