package com.bocloud.ims.interfaces.resource.powervc;

import com.bocloud.cmp.model.OsHosts;
import com.bocloud.common.model.BocloudResult;
import com.bocloud.common.model.GridBean;
import com.bocloud.common.model.Pager;
import com.bocloud.common.model.RequestContext;
import com.bocloud.ims.entity.resource.powervc.PowervcHmc;

import java.util.List;
import java.util.concurrent.CountDownLatch;

/**
 * powervc中hmc连接
 * @author luyanchao
 * @since 2019/1/23 10:40
 */
public interface PowervcHmcService {

    /**
     * 分页查询列表
     *
     * @param page 当前页码
     * @param rows 页面数据大小
     * @param params 查询参数
     * @param sorter 排序参数
     * @param user 操作者信息
     * @param simple 暂时用不到
     * @return 数据结果集
     */
    public BocloudResult<GridBean<PowervcHmc>> list(Pager pager);

    /**
     * 添加hmc连接
     * @param vendorId 所属powervc平台
     * @param hmc hmc 信息
     * @return
     */
    public BocloudResult<PowervcHmc> create(long vendorId, PowervcHmc hmc, RequestContext context, CountDownLatch countDownLatch);

    /**
     * 修改hmc连接
     * @param id hmc id
     * @param hmc hmc 信息
     * @return
     */
    public BocloudResult<PowervcHmc> modify(long id, PowervcHmc hmc, RequestContext context, CountDownLatch countDownLatch);

    /**
     * 移出hmc连接
     * @param id hmc id
     */
    public BocloudResult<PowervcHmc> remove(long id, RequestContext context, CountDownLatch countDownLatch);

    /**
     * 仅针对数据库中数据进行删除，会级联删除Server表、CloudServer表
     * @param id
     * @param userId
     * @return
     */
    public BocloudResult clear(long id, RequestContext context);

    /**
     * 查询详情
     * @param id id
     * @return
     */
    public BocloudResult<PowervcHmc> detail(long id, RequestContext context);

    /**
     * 查询平台下所有hmc连接
     * @param vendorId 平台id
     * @return
     */
    public BocloudResult listByVendor(long vendorId);

    /**
     * 查询HMC中的主机列表
     * @param id hmcId
     * @return 查询结果包含该HMC在HMC中纳管的所有主机，而不是在POWERVC中纳管的所有主机，所以这里不查表，直接调用Driver接口
     */
    public BocloudResult<OsHosts> listHost(long id);

    /**
     * 按主机查询HMC信息
     * @param hostId 主机id
     * @return 查询结果为在POWERVC中该主机对应的HMC链接
     */
    public BocloudResult<List<PowervcHmc>> listByHost(long hostId);
}
