package com.common.mapper;

import com.common.entity.Alarm;
import org.apache.ibatis.annotations.*;
import java.util.List;


@Mapper
public interface AlarmMapper {

    /**
     * 批量插入告警数据
     */
    @Insert({"<script>",
            "INSERT INTO alarm (",
            "id, created_at, alarm_name, alarm_level, alarm_type, ",
            "alarm_major_type, alarm_minor_type,alarm_area_id, attack_ip, victim_ip, victim_web_url, ",
            "device_id, comment,origin_log_ids,log_start_at, log_end_at, window_time, http_status, ",
            "attack_port, victim_port, attack_method, etl_time, log_count, ",
            "attack_chain_phase, disposition_advice, attack_direction, ",
            "judged_state, disposed_state, attack_result, fall, payload,  dns_info, engine_type,   " ,
            "http_req_header  , http_req_body,http_resp_header , http_resp_body ",
            ") VALUES ",
            "<foreach collection='list' item='item' separator=','>",
            "( #{item.id}, #{item.createdAt}, #{item.alarmName}, #{item.alarmLevel}, ",
            "#{item.alarmType}, #{item.alarmMajorType}, #{item.alarmMinorType}, #{item.alarmAreaId}, ",
            "#{item.attackIp, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.victimIp, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.victimWebUrl, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.deviceId, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, ",
            "#{item.comment}, " ,
            "#{item.originLogIds, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.logStartAt}, #{item.logEndAt}, #{item.windowTime}, #{item.httpStatus}, ",
            "#{item.attackPort, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, ",
            "#{item.victimPort, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, ",
            "#{item.attackMethod}, #{item.etlTime}, #{item.logCount}, ",
            "#{item.attackChainPhase, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, ",
            "#{item.dispositionAdvice}, #{item.attackDirection}, ",
            "#{item.judgedState}, #{item.disposedState}, #{item.attackResult}, #{item.fall}, ",
            "#{item.payload},#{item.dnsInfo}, #{item.engineType}, ",
            "#{item.httpReqHeader, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.httpReqBody, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.httpRespHeader, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, ",
            "#{item.httpRespBody, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler})",
            "</foreach>",
            "</script>"})
    void batchInsert(@Param("list") List<Alarm> alarmList);

    /**
     * 单条插入告警数据
     */
    @Insert("INSERT INTO alarm (" +
            "id, created_at, alarm_name, alarm_level, alarm_type, " +
            "alarm_major_type, alarm_minor_type,alarm_area_id, attack_ip, victim_ip, victim_web_url, " +
            "device_id, comment,origin_log_ids, log_start_at, log_end_at, window_time, http_status, " +
            "attack_port, victim_port, attack_method, etl_time, log_count, " +
            "attack_chain_phase, disposition_advice, attack_direction, " +
            "judged_state, disposed_state, attack_result, fall, payload, dns_info, engine_type,  " +
            "http_req_header  , http_req_body,http_resp_header , http_resp_body " +
            ") VALUES (" +
            "#{id}, #{createdAt}, #{alarmName}, #{alarmLevel}, " +
            "#{alarmType}, #{alarmMajorType}, #{alarmMinorType}, #{alarmAreaId}, " +
            "#{attackIp, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, " +
            "#{victimIp, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, " +
            "#{victimWebUrl, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, "+
            "#{deviceId, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, " +
            "#{comment}, " +
            "#{originLogIds, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, " +
            "#{logStartAt}, #{logEndAt}, #{windowTime},#{httpStatus}, " +
            "#{attackPort, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, " +
            "#{victimPort, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, " +
            "#{attackMethod}, #{etlTime}, #{logCount}, " +
            "#{attackChainPhase, typeHandler=com.Modules.etl.handler.ArrayIntegerTypeHandler}, " +
            "#{dispositionAdvice}, #{attackDirection}, " +
            "#{judgedState}, #{disposedState}, #{attackResult}, #{fall}, #{payload}, #{dnsInfo},#{engineType}, " +
            "#{httpReqHeader, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, " +
            "#{httpReqBody, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, " +
            "#{httpRespHeader, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}, " +
            "#{httpRespBody, typeHandler=com.Modules.etl.handler.ArrayStringTypeHandler}   " +
            ")")
    void insert(Alarm alarm);
}