11package communication ;
22
33public class SantaCommunicator {
4- private final int numberOfDaysToRest ;
4+ private final ReindeerPlanner reindeerPlanner ;
55
66 public SantaCommunicator (int numberOfDaysToRest ) {
7- this .numberOfDaysToRest = numberOfDaysToRest ;
7+ this .reindeerPlanner = new ReindeerPlanner ( numberOfDaysToRest ) ;
88 }
99
10- public String composeMessage (String reindeerName , String currentLocation , int numbersOfDaysForComingBack , int numberOfDaysBeforeChristmas ) {
11- var daysBeforeReturn = daysBeforeReturn (numbersOfDaysForComingBack , numberOfDaysBeforeChristmas );
10+ public String composeMessage (String reindeerName , ReindeerLocation reindeerLocation , int numberOfDaysBeforeChristmas ) {
11+ var daysBeforeReturn = reindeerPlanner . daysBeforeReturn (reindeerLocation , numberOfDaysBeforeChristmas );
1212
13- return "Dear " + reindeerName + ", please return from " + currentLocation +
14- " in " + daysBeforeReturn + " day(s) to be ready and rest before Christmas." ;
13+ return "Dear " + reindeerName + ", please return from " + reindeerLocation . currentLocation () +
14+ " in " + daysBeforeReturn + " day(s) to be ready and rest before Christmas." ;
1515 }
1616
17- public boolean isOverdue (String reindeerName , String currentLocation , int numbersOfDaysForComingBack , int numberOfDaysBeforeChristmas , Logger logger ) {
18- if (daysBeforeReturn ( numbersOfDaysForComingBack , numberOfDaysBeforeChristmas ) <= 0 ) {
19- logger .log ("Overdue for " + reindeerName + " located " + currentLocation + "." );
17+ public boolean isOverdue (String reindeerName , ReindeerLocation reindeerLocation , int numberOfDaysBeforeChristmas , Logger logger ) {
18+ if (! reindeerLocation . isReachableInDays ( reindeerPlanner . numberOfDaysBeforeRestingBeforeChristmas ( numberOfDaysBeforeChristmas )) ) {
19+ logger .log ("Overdue for " + reindeerName + " located " + reindeerLocation . currentLocation () + "." );
2020 return true ;
2121 }
2222 return false ;
2323 }
2424
25- private int daysBeforeReturn (int numbersOfDaysForComingBack , int numberOfDaysBeforeChristmas ) {
26- return numberOfDaysBeforeChristmas - numbersOfDaysForComingBack - numberOfDaysToRest ;
25+ public static class ReindeerPlanner {
26+ private final int numberOfDaysToRest ;
27+
28+ public ReindeerPlanner (int numberOfDaysToRest ) {
29+ this .numberOfDaysToRest = numberOfDaysToRest ;
30+ }
31+
32+ private int numberOfDaysBeforeRestingBeforeChristmas (int numberOfDaysBeforeChristmas ) {
33+ return numberOfDaysBeforeChristmas - numberOfDaysToRest ;
34+ }
35+
36+ private int daysBeforeReturn (ReindeerLocation reindeerLocation , int numberOfDaysBeforeChristmas ) {
37+ return numberOfDaysBeforeRestingBeforeChristmas (numberOfDaysBeforeChristmas )
38+ - reindeerLocation .distanceFromSantaHouseInDays ();
39+ }
40+ }
41+
42+ public record ReindeerLocation (String currentLocation , int distanceFromSantaHouseInDays ) {
43+ boolean isReachableInDays (int daysToTravel ) {
44+ return daysToTravel > distanceFromSantaHouseInDays ();
45+ }
2746 }
2847}
0 commit comments