package com.bocloud.ims.interfaces.resource;

import com.alibaba.fastjson.JSONObject;
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.CloudVendor;
import com.bocloud.ims.entity.resource.PoolGroup;
import com.bocloud.ims.entity.resource.PoolGroupLabel;
import com.bocloud.ims.entity.resource.PoolGroupRelation;

import java.util.List;

/**
 * 资源池service
 *
 * @author zhangdi
 * @version 1.0
 * @since 2018年4月23日
 */
public interface ResourcePoolService {

	/**
	 * 查询列表
	 * 
	 * @param page
	 * @param rows
	 * @param params
	 * @param sorter
	 * @param simple
	 * @param condition
	 * @param context
	 * @return
	 */
	BocloudResult<GridBean<PoolGroup>> list(Pager pager, RequestContext context);

	/**
	 * 查询资源池分组树
	 *
	 * @param parentId
	 * @return
	 */
	BocloudResult list(Long parentId, String category);

	/**
	 * 创建资源池分组
	 *
	 * @param group
	 * @return
	 */
	BocloudResult<PoolGroup> create(PoolGroup group);

	/**
	 * 更新资源池分组
	 *
	 * @param bean
	 * @param userId
	 * @return
	 */
	BocloudResult modify(PoolGroup bean, Long userId);

	/**
	 * 删除资源池分组
	 *
	 * @param id
	 * @param userId
	 * @return
	 */
	BocloudResult remove(Long id, Long userId);

	/**
	 * 查看资源池分组详情
	 *
	 * @param id
	 * @return
	 */
	BocloudResult<PoolGroup> detail(Long id);

	/**
	 * 判断是否存在
	 *
	 * @param name
	 * @param category
	 * @return
	 */
	BocloudResult exists(String name, String category);

	/**
	 * 查询可绑定的资源池列表
	 *
	 * @param category
	 * @return
	 */
	BocloudResult listByCategory(String category);

	/**
	 * 资源池 目标关联
	 *
	 * @param params
	 * @return
	 */
	BocloudResult createReleation(PoolGroup poolGroupParam);

	/**
	 * 接触资源池 目标关联关系
	 *
	 * @param params
	 * @return
	 */
	BocloudResult removeReleation(PoolGroup poolGroupParam);

	/**
	 * 资源池创建标签
	 *
	 * @param params
	 * @return
	 */
	BocloudResult createLabel(PoolGroup poolGroupParam);

	/**
	 * 资源池删除标签
	 *
	 * @param params
	 * @return
	 */
	BocloudResult removeLabel(PoolGroup poolGroupParam);

	/**
	 * 查询业务绑定的资源池列表
	 *
	 * @param object
	 * @return
	 */
	BocloudResult listByBusinessId(JSONObject object);

	/**
	 * 资源池绑定的标签
	 *
	 * @param params
	 * @return
	 */
	BocloudResult<List<PoolGroupLabel>> listPoolGroupLabel(String params);

	/**
	 * 根据业务 平台查询资源池列表
	 * 
	 * @param object
	 * @param context
	 * @return
	 */
	BocloudResult listByBidVid(JSONObject object, RequestContext context);

	/**
	 * 查询资源池下绑定资源数据
	 *
	 * @param object
	 * @return
	 */
	BocloudResult listRelationByGroupId(JSONObject object);

	/**
	 * 资源池列表查询
	 *
	 * @param params
	 * @param user
	 * @return
	 */
	BocloudResult groups(String params, RequestContext context);

	/**
	 * 绑定/解绑策略
	 * 
	 * @param id
	 * @param policyId
	 * @param priorityType
	 * @param context
	 * @return
	 */
	BocloudResult patch(Long id, Long policyId, String priorityType, RequestContext context);

	BocloudResult condition(Pager pager, String condition, RequestContext context);

	/**
	 * 查询资源池容量信息
	 *
	 * @param id
	 * @return
	 */
	BocloudResult capacity(Long id,RequestContext context);

	/**
	 * 资源池状态调整
	 *
	 * @param id
	 * @param status
	 * @param context
	 * @return
	 */
	BocloudResult updateStatus(List<Long> id, String status, RequestContext context);

	/**
	 * 资源启用、禁用
	 * 
	 * @param poolGroupRelation
	 * @return
	 */
	BocloudResult enabled(PoolGroupRelation poolGroupRelation);

	List<PoolGroup> listTenantPoolGroups(Long tenantId, String vendorType);

	List<Long> listTenantVendorIds(Long tenantId, String vendorType);

	List<String> listTenantRegions(Long tenantId, String vendorType);

    BocloudResult modifyRegionRelation(List<Long> relationIds, Boolean isUsed, RequestContext context);

    /**
     * 根据云平台创建资源池
     * @param vendor
     * @param operator
     */
	void createVendorPoolGroup(CloudVendor vendor, Long operator);

}
