package com.common.entity;

import lombok.Data;
import java.time.LocalDateTime;

/**
 * 探针心跳状态实体类
 * 对应表: device_collect_heartbeat
 */
@Data
public class DeviceCollectHeartbeat {
    
    /** 自增主键 */
    private Long id;
    
    /** 探针唯一标识（由探针上报） */
    private String collectId;
    
    /** 探针名称（可选） */
    private String collectName;
    
    /** 探针IP（支持IPv6） */
    private String deviceIp;
    
    /** 探针版本 */
    private String appVersion;
    
    /** 最后一次心跳时间（毫秒精度） */
    private LocalDateTime lastHeartbeat;
    
    /** 累计心跳次数（可监控丢包率） */
    private Long heartbeatCount;
    
    /** 在线状态：online / offline */
    private String status;
    
    /** 连续心跳失败次数（平台侧计算） */
    private Integer failCount;
    
    /** 最后更新时间 */
    private LocalDateTime updateTime;
    


    
    public DeviceCollectHeartbeat() {
        this.heartbeatCount = 1L;
        this.status = "online";
        this.failCount = 0;
        this.updateTime = LocalDateTime.now();

    }
    
    /**
     * 更新心跳
     */
    public void updateHeartbeat() {
        this.lastHeartbeat = LocalDateTime.now();
        this.heartbeatCount = (this.heartbeatCount == null ? 1L : this.heartbeatCount + 1);
        this.status = "online";
        this.failCount = 0;
        this.updateTime = LocalDateTime.now();
    }
    
    /**
     * 标记为离线
     */
    public void markOffline() {
        this.status = "offline";
        this.failCount = (this.failCount == null ? 1 : this.failCount + 1);
        this.updateTime = LocalDateTime.now();
    }
    
    /**
     * 恢复在线
     */
    public void markOnline() {
        this.status = "online";
        this.failCount = 0;
        this.updateTime = LocalDateTime.now();
    }
}
