package src.fr.api;
import java.util.Set;
public interface Configuration {


    /*
     * @return true if there is no compatibility issue between PartType else false
     */
    boolean isValid();
    
    /*
     * @return true if the configuration is valid and done
     */
    boolean isComplete();

    /*
     * @return the list of the PartType in the configuration
     */
    Set<PartType> getSelectedParts();
    
    /*
     * Select a PartType to add to the configuration
     * @param chosenPart : the PartType that we wish to add to the configuration
     */
    void selectPart(PartType chosenPart);

    /*
     * @return the PartType that we chose earlier which has Category we choose
     * @param catgeory : Category that we want to know about the PartType can be null
     */
    PartType getSelectionForCategory(Category category);

    /*
     * DeSelect PartType has Catgerory catgoryToClear to delete from the configuration
     * @param categoryToClear : the PartType has categoryToClear Category
     * that we wish to delete from the configuration
     */
    void unselectPartType(Category categoryToClear);

    /*
     * Remove all PartType from configuation
     */
    void clear();
}