package com.bocloud.ims.interfaces.resource;

import com.bocloud.cmp.model.CloudVendorBean;
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.AlarmThreshold;
import com.bocloud.ims.entity.resource.CloudVendor;

import java.util.List;

/**
 * 云供应商接口
 *
 * @author DZG
 * @since V1.0 2016年9月1日
 */
public interface CloudVendorService {

    /**
     * 创建云供应商
     *
     * @param vendor
     * @param context
     * @return
     */
    BocloudResult<CloudVendor> create(CloudVendor vendor, RequestContext context);

    /**
     * 更新云供应商
     *
     * @param bean
     * @param userId
     * @return
     */
    BocloudResult<CloudVendor> modify(CloudVendorBean bean, RequestContext context);

    /**
     * 删除云供应商
     *
     * @param id
     * @param context
     * @return
     */
    BocloudResult remove(Long id, RequestContext context);

    /**
     * 冻结云供应商
     *
     * @param id
     * @param userId
     * @return
     */
    BocloudResult lock(Long id, Long userId);

    /**
     * 解冻云供应商
     *
     * @param id
     * @param userId
     * @return
     */
    BocloudResult active(Long id, Long userId);

    /**
     * 查看云供应商详情
     *
     * @param id
     * @return
     */
    BocloudResult<CloudVendor> detail(Long id);

    /**
     * 根据云供应商姓名查询云供应商
     *
     * @param name
     * @return
     */
    BocloudResult checkName(String name);

    /**
     * 查询云供应商列表
     *
     * @param pager
     * @param context
     * @return
     */
    BocloudResult<GridBean<CloudVendor>> list(Pager pager, RequestContext context);

    /**
     * 根据供应商类型查询列表
     *
     * @param type
     * @return
     */
    List<CloudVendor> list(String type);

    /**
     * 查询所有云供应商
     *
     * @return
     */
    List<CloudVendor> listAll();

    /**
     * 查询租户下已授权的云平台
     *
     * @param types
     * @param tenantId
     * @return
     */
    BocloudResult listAuthProvider(List<String> types, Long tenantId);

    /**
     * 设置告警阈值
     *
     * @param alarmThreshold
     * @return
     */
    BocloudResult createAlarm(AlarmThreshold alarmThreshold);

    /**
     * 获取告警阈值
     *
     * @param target
     * @return
     */
    BocloudResult<AlarmThreshold> getAlarm(Long target);

    /**
     * 查看vcenter平台全部集群的内存/cpu/存储的总使用量
     *
     * @param id 平台唯一标识
     * @author sxp
     * @since Apr 23, 2018
     */
    BocloudResult<CloudVendor> queryCapacity(Long id);

    /**
     * 根据平台类型查询所有平台
     *
     * @param type
     * @return
     */
    BocloudResult getByType(String type);

    /**
     * 资源池查询可用平台
     *
     * @param params
     * @return
     */
    BocloudResult listByPool(String params);

    /**
     * 批量开启告警
     *
     * @param ids
     * @param userId
     * @return
     */
    BocloudResult batchOpenAlarm(List<Long> ids, Long userId);

    /**
     * 批量关闭告警
     *
     * @param ids
     * @param userId
     * @return
     */
    BocloudResult batchCloseAlarm(List<Long> ids, Long userId);

    BocloudResult batchOperationAlarm(List<Long> ids, String action, Long userId);

    /**
     * 根据平台类型查询
     *
     * @param types
     * @return
     */
    BocloudResult listByTypes(List<String> types);

    /**
     * 云平台操作
     *
     * @param id
     * @param action
     * @param context
     * @return
     */
    BocloudResult action(Long id, String action, RequestContext context);

    /**
     * 更新云平台密码
     *
     * @param id
     * @param params
     * @param context
     * @return
     */
    BocloudResult updatePassword(Long id, CloudVendor cloudVendor, RequestContext context);

    /**
     * 通过condition方式获取云平台列表
     *
     * @param condition
     * @param context
     * @return
     */
    BocloudResult condition(String condition, RequestContext context);

    /**
     * 清除provider中缓存原生平台的session
     * @param id 平台id
     * @param context 用户信息
     */
    BocloudResult clearSession(Long id, RequestContext context);

	BocloudResult updateExcessRatio(Long id, CloudVendor cloudVendor, RequestContext context);

}
