package org.openstack4j.api.senlin;

import java.util.List;

import org.openstack4j.model.common.ActionResponse;
import org.openstack4j.model.senlin.Policy;
import org.openstack4j.model.senlin.PolicyCreate;

/**
 * This interface defines all methods for the manipulation of Policy
 *
 * @author lion
 */
public interface SenlinPolicyService {

    /**
     * Gets a list of currently existing {@link Policy}s.
     *
     * @return the list of {@link Policy}s
     */
    List<? extends Policy> list();

    /**
     * <code>POST /v1/policies</code><br \>
     * <p>
     * Creates a new {@link Policy} out of a {@link PolicyCreate} object
     *
     * @param newPolicy {@link PolicyCreate} object out of which policy is to be created
     * @return new {@link Policy} as returned from the server
     */
    Policy create(PolicyCreate newPolicy);

    /**
     * returns details of a {@link Policy}.
     *
     * @param policyID Id of {@link Policy}
     * @return Policy
     */
    Policy get(String policyID);

    /**
     * <code>PATCH /v1/policies/​{policy_id}​</code><br \>
     * <p>
     * Update a {@link Policy} out of a {@link PolicyCreate} object
     *
     * @param policyID Id of {@link Policy}
     * @param newPolicy {@link PolicyCreate} object out of which stack is to be update
     * @return new {@link Policy} as returned from the server
     */
    Policy update(String policyID, PolicyCreate newPolicy);

    /**
     * Deletes the specified {@link Policy} from the server.
     *
     * @param policyID Id of {@link Policy}
     * @return the action response
     */
    ActionResponse delete(String policyID);
}
