package org.leumasjaffe.charsheet.model.magic; import java.util.Collection; import java.util.List; import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.NonNull; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY) public interface DDSpellbook { @NonNull Collection spellsKnownAtLevel( int level ); @NonNull List spellsPreparedAtLevel( int level ); @NonNull default List getSpellsPreparedPreviouslyForLevel(int level) { return spellsPreparedAtLevel(level); } default boolean preparesSpells() { return false; } default int numSpellsKnownAtLevel( int level ) { return spellsKnownAtLevel( level ).size(); } int numSpellsPerDayAtLevel( int level ); default int numSpellsPerDayRemainingAtLevel(int level) { return spellsPreparedAtLevel( level ).size(); } void castSpell( int level, final DDSpell spell ); void prepareSpells(int level, List spells); }