package com.malk.aipocloud.repository.entity;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.malk.base.BasePo;
import com.malk.utils.UtilMap;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import javax.persistence.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "aipocloud_event")
public class AbEventPo extends BasePo {

    /**
     * 事件ID(唯一)
     */
    private int serialId;

    /**
     * 用户登录名
     */
    private String logonName;

    /**
     * 用户所在部门
     */
    private String department;

    /**
     * 计算机名
     */
    private String fqdn;

    /**
     * 触发IP
     */
    private String ipAddress;

    /**
     * 触发邮箱
     */
    private String email;

    /**
     * 事件发送时间
     */
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date detectDateTime;

    /**
     * 发送通道
     */
    private int channelType;

    /// 这个是有张数值对应表，需要还原
    @Transient
    private String channelTypeDisplay;

    public static String convertChannelTypeDisplay(int channelType) {
        return UtilMap.map("1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 100, 101, 102, 103, 104, 105, 106",
                "HTTP, HTTPS, FTP, IM, (邮件)SMTP, 自定义协议, 数据发现, 网络打印, IMAP, POP3, HTTP, HTTPS, FTP, IM, (邮件)SMTP, 自定义协议, 终端数据发现, 终端打印, 移动存储, 网络共享, 刻录, 应用程序, 蓝牙, WebService应用, 文件共享, ActiveSync, 本地存储, 移动端HTTP, 移动端HTTPS, HTTP(WebMail), HTTPS(WebMail), DNS-TCP, DNS-UDP, 应用程序(复制/剪切), 应用程序(粘贴), 应用程序(文件访问), 应用程序(截屏), 应用程序(水印), 应用程序(下载), 应用程序(自动标签)")
                .get(String.valueOf(channelType));
    }

    /**
     * 命中的策略名
     */
    private String policiesName;

    /**
     * 命中的分级名称
     */
    private String classificationLevelNames;

    /**
     * 命中的详细规则名称
     */
    private String rulesName;

    /**
     * 文件标签名称
     */
    private String tagNames;

    /**
     * 发送的目标名称
     */
    private String displayName;

    /**
     * 附件信息: 附件名 filename, 附件大小 fileSize, 附件MD5 fileMd5
     */
    private String attachments;

    /// 临时存储List
    @Transient
    private List<Map> attachmentsDisplay;

    public List<Map> getAttachmentsDisplay() {
        if (StringUtils.isBlank(attachments)) {
            return Arrays.asList();
        }
        return (List<Map>) JSON.parse(attachments);
    }

    /**
     * 钉钉审批单ID
     */
    private String instanceId;

    /**
     * 钉钉审批单状态
     */
    private String state;

    /**
     * 同步结果
     */
    private String sync;

    /**
     * 过期时间: prd 审批去重逻辑：用户 + 通道 + md5 + 有效期（审批通过且在生效时间内）
     */
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date expire;

    /**
     * 员工ID
     */
    private String userId;

    /**
     * 员工姓名
     */
    private String userName;
}
