package com.qqchen.deploy.backend.framework.ssh.websocket;

import lombok.Builder;
import lombok.Data;
import org.springframework.web.socket.CloseStatus;

/**
 * SSH事件数据（Framework层）
 * 
 * 强类型的事件数据类，替代 Map<String, Object>
 * 提供类型安全、IDE提示和编译时检查
 */
@Data
@Builder
public class SSHEventData {
    
    /**
     * 会话ID（必需）
     */
    private String sessionId;
    
    /**
     * 用户ID（连接时必需）
     */
    private Long userId;
    
    /**
     * 用户名（连接时必需）
     */
    private String username;
    
    /**
     * SSH连接目标（必需）
     */
    private SSHTarget target;
    
    /**
     * 用户输入的命令（ON_COMMAND事件）
     */
    private String command;
    
    /**
     * WebSocket关闭状态（AFTER_DISCONNECT事件）
     */
    private CloseStatus closeStatus;
    
    /**
     * 错误信息（ON_ERROR事件）
     */
    private String errorMessage;
    
    /**
     * 异常对象（ON_ERROR事件）
     */
    private Throwable exception;
    
    /**
     * 断开原因（BEFORE_SHUTDOWN事件）
     */
    private String disconnectReason;
    
    /**
     * 断开原因描述（BEFORE_SHUTDOWN事件）
     */
    private String disconnectReasonDesc;
    
    /**
     * 客户端IP（连接时可选）
     */
    private String clientIp;
    
    /**
     * 客户端User-Agent（连接时可选）
     */
    private String userAgent;
    
    /**
     * 扩展数据（特殊场景）
     */
    private java.util.Map<String, Object> metadata;
}
