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

import com.qqchen.deploy.backend.deploy.dto.ServerDTO;
import com.qqchen.deploy.backend.deploy.dto.ServerInfoDTO;
import com.qqchen.deploy.backend.deploy.dto.ServerInitializeDTO;
import com.qqchen.deploy.backend.deploy.entity.Server;
import com.qqchen.deploy.backend.deploy.query.ServerQuery;
import com.qqchen.deploy.backend.framework.service.IBaseService;

/**
 * 服务器服务接口
 */
public interface IServerService extends IBaseService<Server, ServerDTO, ServerQuery, Long> {

    /**
     * 初始化服务器硬件信息（由前端SSH采集后回调）
     *
     * @param serverId 服务器ID
     * @param dto      服务器硬件信息
     * @return 更新后的服务器信息
     */
    ServerDTO initializeServerInfo(Long serverId, ServerInitializeDTO dto);

    /**
     * 测试服务器SSH连接（轻量级，只验证连通性）
     * 
     * 用途：
     * - 定时监控调用（不采集硬件信息，性能优化）
     * - 快速检测服务器在线状态
     * - 前端"测试连接"按钮
     * 
     * 执行的操作：
     * - 创建SSH连接并验证
     * - 更新服务器状态（ONLINE/OFFLINE）
     * - 更新最后连接时间
     * - 不采集硬件信息（hostname、CPU等）
     * 
     * @param serverId 服务器ID
     * @return 连接状态信息（只包含连通性、错误信息、响应时间）
     */
    ServerInfoDTO testConnection(Long serverId);
    
    /**
     * 采集服务器硬件信息（需要先确保服务器在线）
     * 
     * 用途：
     * - 首次添加服务器后调用（前端先 testConnection，成功后调用此方法）
     * - 前端"刷新硬件信息"按钮
     * - 服务器硬件升级后手动刷新
     * 
     * 执行的操作：
     * - 采集 hostname、OS版本、CPU核心数、内存大小、磁盘信息
     * - 更新数据库中的硬件信息
     * 
     * 前置条件：
     * - 服务器必须在线（建议先调用 testConnection）
     * 
     * @param serverId 服务器ID
     * @return 完整的硬件信息
     */
    ServerInfoDTO collectHardwareInfo(Long serverId);
}

