package cd.casic.module.machine.service;

import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.module.machine.controller.vo.MachineInfoVO;
import cd.casic.module.machine.controller.vo.SecretKeyVO;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import jakarta.validation.Valid;

import java.util.List;

public interface MachineInfoService {
    /**
     * 新增机器
     *
     * @return 新增机器的id
     */
    Long createMachine(MachineInfoVO MachineInfoVO);

    /**
     * 查看机器列表
     *
     * @return 机器列表
     */
    PageResult<MachineInfoDO> listMachineInfo(@Valid MachineInfoVO MachineInfoVO);

    /**
     * 更新机器信息
     */
    void updateMachineInfo(@Valid MachineInfoVO machineInfoVO);

    /**
     * 变更机器状态
     */
    Integer updateStatus(@Valid MachineInfoVO machineInfoVO);

    /**
     * 绑定密钥
     */
    void bindingSecretKey(SecretKeyVO secretKeyVO);

    /**
     * 批量删除机器
     *
     * @param machineInfoIds 机器id列表
     */
    void deleteMachineInfoList(String machineInfoIds);

    /**
     * 删除机器信息
     *
     * @param machineInfoId 机器id
     */
    void deleteMachineInfo(Long machineInfoId);

    /**
     * 获取绑定的密钥
     *
     * @param secretKeyId 密钥id
     * @return 绑定的机器列表
     */
    List<MachineInfoDO> selectBindMachineBySecretKey(Long secretKeyId);

    /**
     * 验证机器是否存在
     *
     * @param id 机器id
     */
    MachineInfoDO validateMachineInfoExists(Long id);
}
