package com.qqchen.deploy.backend.deploy.service;

import com.qqchen.deploy.backend.deploy.dto.SSHAuditLogDTO;
import com.qqchen.deploy.backend.deploy.entity.SSHAuditLog;
import com.qqchen.deploy.backend.deploy.entity.Server;
import com.qqchen.deploy.backend.deploy.query.SSHAuditLogQuery;
import com.qqchen.deploy.backend.framework.service.IBaseService;

/**
 * SSH审计日志服务接口
 */
public interface ISSHAuditLogService extends IBaseService<SSHAuditLog, SSHAuditLogDTO, SSHAuditLogQuery, Long> {
    
    /**
     * 创建审计日志（连接时）
     *
     * @param userId    用户ID
     * @param server    服务器信息
     * @param sessionId WebSocket会话ID
     * @param clientIp  客户端IP
     * @param userAgent 浏览器UA
     * @return 审计日志ID
     */
    Long createAuditLog(Long userId, Server server, String sessionId, String clientIp, String userAgent);
    
    /**
     * 记录命令（每次用户输入）
     *
     * @param sessionId WebSocket会话ID
     * @param command   用户输入的命令
     */
    void recordCommand(String sessionId, String command);
    
    /**
     * 关闭审计日志（断开时）
     *
     * @param sessionId    WebSocket会话ID
     * @param status       结束状态
     * @param errorMessage 错误信息
     */
    void closeAuditLog(String sessionId, String status, String errorMessage);
    
    /**
     * 检查用户当前活跃的SSH会话数
     *
     * @param userId 用户ID
     * @return 活跃会话数
     */
    long countUserActiveSessions(Long userId);
    
    /**
     * 检查用户对指定服务器当前活跃的SSH会话数
     *
     * @param userId   用户ID
     * @param serverId 服务器ID
     * @return 活跃会话数
     */
    long countUserActiveSessionsForServer(Long userId, Long serverId);
}
