package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.api.domain.RmRegisterMsgRemote;
import com.ruoyi.system.api.domain.RmResourceRegistrationRemote;
import com.ruoyi.system.domain.RmResourceRegistration;

import java.util.List;
import java.util.Map;

/**
 * 资源注册Service接口
 * 
 * @author gyt
 * @date 2025-08-12
 */
public interface IRmResourceRegistrationService 
{
    /**
     * 查询资源注册
     * 
     * @param id 资源注册主键
     * @return 资源注册
     */
    public RmResourceRegistration selectRmResourceRegistrationById(Long id);

    /**
     * 查询资源注册列表
     * 
     * @param rmResourceRegistration 资源注册
     * @return 资源注册集合
     */
    public List<RmResourceRegistration> selectRmResourceRegistrationList(RmResourceRegistration rmResourceRegistration);

    /**
     * 新增资源注册
     * 
     * @param rmResourceRegistration 资源注册
     * @return 结果
     */
    public int insertRmResourceRegistration(RmResourceRegistration rmResourceRegistration);

    /**
     * 修改资源注册
     * 
     * @param rmResourceRegistration 资源注册
     * @return 结果
     */
    public int updateRmResourceRegistration(RmResourceRegistration rmResourceRegistration);

    /**
     * 资源注册-注册
     * @param rmResourceRegistration
     * @return
     */
    public int register(RmResourceRegistration rmResourceRegistration);

    /**
     * 批量删除资源注册
     * 
     * @param ids 需要删除的资源注册主键集合
     * @return 结果
     */
    public int deleteRmResourceRegistrationByIds(Long[] ids);

    /**
     * 删除资源注册信息
     * 
     * @param id 资源注册主键
     * @return 结果
     */
    public int deleteRmResourceRegistrationById(Long id);

    /**
     * 查询所有资源名称（包含设备使用）
     * @return 资源注册集合
     */
    public List<Map> selectAllResourceName();
    /**
     * 查询所有资源名称
     * @return 资源注册集合
     */
    public List<Map> selectAllResourceNameByType(RmResourceRegistration resourceRegistration);
    /**
     * 检测到服务器离线，修改状态为离线
     * @param rmResourceRegistration
     * @return
     */
    R<String> updateStatusByResource(RmResourceRegistration rmResourceRegistration);

    AjaxResult getServerOnlineRate();

    List<RmResourceRegistration> getRegistrationByIds(String[] ids);

    /**
     * 自动注册
     * @param rmResourceRegistration
     * @return
     */
    int innerAddRegist(RmRegisterMsgRemote rmResourceRegistration);

    /**
     * 添加节点标识
     * @param rmResourceRegistration
     * @return
     */
    int innerUpdateRegist(RmResourceRegistrationRemote rmResourceRegistration);

    /**
     * 选择公网业务IP
     * @param rmResourceRegistration
     * @return
     */
    int bindBusinessPublicIp(RmResourceRegistration rmResourceRegistration);

    /**
     * 查询所有逻辑节点标识
     * @return
     */
    List<Map> getAllLogicalNodeId();

    /**
     * 绑定业务名称
     * @param rmResourceRegistration
     * @return
     */
    int bindBusinessByClientIds(RmResourceRegistration rmResourceRegistration);
}
