package com.bocloud.ims.interfaces.resource;

import com.bocloud.cmp.model.DataStoreBean;
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.CloudServer;
import com.bocloud.ims.entity.resource.DataStore;
import com.bocloud.ims.entity.resource.Server;

import java.util.List;

/**
 * 数据存储服务接口
 *
 * @author weiwei
 * @version 1.0
 * @since 2016.12.29
 */
public interface DataStoreService {

    /**
     * 列表
     *
     * @param pager
     * @param context
     * @return
     */
    BocloudResult<GridBean<DataStore>> list(Pager pager, RequestContext context);

    /**
     * 添加数据存储
     *
     * @param dataStore
     * @param context
     * @return
     */
    BocloudResult<DataStore> create(DataStore dataStore, RequestContext context);

    /**
     * 更新
     *
     * @param bean   基本信息
     * @param userId 操作用户ID
     * @return 操作结果
     */
    BocloudResult<DataStore> modify(DataStoreBean bean, Long userId);

    /**
     * 移除
     *
     * @param id
     * @param context
     * @return 操作结果
     */
    BocloudResult remove(Long id, RequestContext context);

    /**
     * 详细信息
     *
     * @param id ID
     * @return 详细信息
     */
    BocloudResult<DataStore> detail(Long id);

    /**
     * 该存储下的虚拟机
     *
     * @param id
     * @return
     */
    BocloudResult servers(Long id);

    /**
     * 虚拟机列表展示
     *
     * @param pager
     * @param id
     * @return
     */
    BocloudResult<GridBean<CloudServer>> servers(Pager pager, Long id);

    /**
     * 该存储下的宿主机
     *
     * @param id
     * @return
     */
    BocloudResult<List<Server>> hosts(Long id);

    /**
     * 宿主机列表展示
     *
     * @param pager
     * @param id
     * @return
     */
    BocloudResult<GridBean<Server>> hosts(Pager pager, Long id);

    /**
     * 上传文件至数据存储
     *
     * @param id
     * @param filePath
     * @param context
     * @return
     */
    BocloudResult uploadFile(Long id, String filePath, RequestContext context);

    /**
     * 卸载主机的数据存储
     *
     * @param id
     * @param hostId
     * @param userId
     * @return
     */
    BocloudResult unmount(Long id, Long hostId, Long userId);

    /**
     * 查询宿主机绑定的存储
     *
     * @param hostId
     * @return
     */
    BocloudResult listByHost(Long hostId);

    /**
     * 查询数据存储下关联的宿主机
     *
     * @param storeId
     * @return
     */
    BocloudResult listByStore(Long storeId);

    /**
     * 批量修改标签
     *
     * @param params
     * @param context
     * @return
     */
    BocloudResult batchModifyLabel(String params, RequestContext context);

    BocloudResult condition(String condition, RequestContext context);

}
