package de.ahus1.lottery.domain;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Draw {
private final LocalDate date;
private Set<Integer> numbers;
private Draw(LocalDate aDate, Set<Integer> someNumbers) {
numbers = someNumbers;
date = aDate;
}
public Set<Integer> getNumbers() {
return numbers;
}
public LocalDate getDate() {
return date;
}
public static class DrawBuilder {
public static final int DRAW_SIZE = 6;
Set<Integer> numbers = new HashSet<Integer>();
private boolean complete;
private LocalDate date;
public DrawBuilder withNumber(Integer aNumber) {
if (numbers.contains(aNumber)) {
throw new IllegalArgumentException("you must not add the same number twice ("
+ aNumber + ")");
}
numbers.add(aNumber);
return this;
}
public boolean contains(Integer aNumber) {
return numbers.contains(aNumber);
}
public int size() {
return numbers.size();
}
public DrawBuilder withNumbers(Integer... someNumbers) {
List<Integer> list = Arrays.asList(someNumbers);
list.forEach(n -> withNumber(n));
return this;
}
public Draw build() {
if (numbers.size() != DRAW_SIZE) {
throw new IllegalStateException("you need " + DRAW_SIZE + " numbers in a draw!");
}
return new Draw(date, numbers);
}
public boolean isComplete() {
return numbers.size() == DRAW_SIZE;
}
public DrawBuilder withDate(LocalDate aDate) {
date = aDate;
return this;
}
}
public static DrawBuilder builder() {
return new DrawBuilder();
}
}