package com.bocloud.cmp.provider.network;

import com.bocloud.cmp.model.NetworkModel;
import com.bocloud.cmp.model.PortGroupModel;
import com.bocloud.cmp.model.SwitchModel;
import com.bocloud.cmp.provider.SuperProvider;
import com.bocloud.common.model.BocloudResult;

import java.util.List;

/**
 * 网络操作接口
 *
 * @author weiwei
 */
public interface NetworkProvider extends SuperProvider {
    public BocloudResult list();

    public BocloudResult create(NetworkModel model);

    public BocloudResult remove(String networkId);

    public BocloudResult detail(String networkId);

    public BocloudResult modify(NetworkModel model);

    /**
     * 创建分布式交换机
     *
     * @param model
     * @return
     */
    public BocloudResult createDSwitch(SwitchModel model);

    /**
     * 创建标准交换机
     *
     * @param model
     * @return
     */
    public BocloudResult createVSwitch(SwitchModel model);

    /**
     * 移除分布式交换机
     *
     * @param name
     * @return
     */
    public BocloudResult removeDSwitch(String name);

    /**
     * 重命名分布式交换机
     *
     * @param oldName
     * @param newName
     * @return
     */
    public BocloudResult renameDSwitch(String oldName, String newName);

    /**
     * 更新分布式交换机
     *
     * @param model
     * @return
     */
    public BocloudResult updateDVSwitch(SwitchModel model);

    /**
     * 删除主机绑定的标准交换机
     *
     * @param hostName
     * @param vswitchName
     * @param pgNames
     * @return
     */
    public BocloudResult removeVSwitch(String hostName, String vswitchName, List<String> pgNames);

    /**
     * 更新标准交换机
     *
     * @param hostName
     * @param vswitchName
     * @param model
     * @return
     */
    public BocloudResult updateVSwitch(String hostName, String vswitchName, SwitchModel model);

    /**
     * 创建端口组
     *
     * @param hostName
     * @param vswitchName
     * @param pgModel
     * @return
     */
    public BocloudResult createPortGroup(String hostName, String vswitchName, PortGroupModel pgModel);

    /**
     * 删除端口组
     *
     * @param hostName
     * @param pgName
     * @param type
     * @return
     */
    public BocloudResult removePortGroup(String hostName, String pgName, String type);

    /**
     * 更新端口组
     *
     * @param hostName
     * @param pgModel
     * @return
     */
    public BocloudResult updatePortGroup(String hostName, PortGroupModel pgModel);

    /**
     * 分布式交换机添加主机
     *
     * @param model
     * @return
     */
    public BocloudResult addHost(SwitchModel model);

    /**
     * 查询交换机
     *
     * @param model
     * @return
     */
    public BocloudResult listVSwitch(SwitchModel model);

    public BocloudResult listProfile();

    default BocloudResult listByVdc(String vdcName) {
        return null;
    }
}
