package org.onlab.onos.net.resource;

import org.onlab.onos.net.Link;
import org.onlab.onos.net.intent.IntentId;

/**
 * Service for providing link resource allocation.
 */
public interface LinkResourceService {

    /**
     * Requests resources.
     *
     * @param req resources to be allocated
     * @return allocated resources
     */
    LinkResourceAllocations requestResources(LinkResourceRequest req);

    /**
     * Releases resources.
     *
     * @param allocations resources to be released
     */
    void releaseResources(LinkResourceAllocations allocations);

    /**
     * Returns all allocated resources.
     *
     * @return allocated resources
     */
    Iterable<LinkResourceAllocations> getAllocations();

    LinkResourceAllocations getAllocation(IntentId intentId);

    /**
     * Returns all allocated resources to given link.
     *
     * @param link a target link
     * @return allocated resources
     */
    Iterable<LinkResourceAllocations> getAllocations(Link link);

    /**
     * Returns all IDs of intents using the given link.
     *
     * @param link a target link
     * @return IDs of intents using the link
     */
    Iterable<IntentId> getIntents(Link link);

    /**
     * Returns available resources for given link.
     *
     * @param link a target link
     * @return available resources for the target link
     */
    ResourceRequest getAvailableResources(Link link);
}
