// Copyright © 2016 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.core.domain;
import com.google.common.collect.Maps;
import org.joda.time.DateTime;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import static fi.hsl.parkandride.core.domain.FacilityStatus.EXCEPTIONAL_SITUATION;
import static fi.hsl.parkandride.core.domain.FacilityStatus.IN_OPERATION;
import static java.util.stream.Collectors.*;
public class OpeningHours {
public Boolean openNow;
/**
* Summary of min( pricing.from ) and max( pricing.until )
*/
public Map<DayType, TimeDuration> byDayType;
@Valid
public MultilingualString info;
@Valid
public MultilingualUrl url;
public void initialize(List<Pricing> pricing, DateTime now, FacilityStatus status) {
byDayType = Maps.newLinkedHashMap();
// Opening hours by day type: min(time.from) and max(time.until) of pricing rows by dayType
pricing.stream()
.collect(groupingBy(Pricing::getDayType, mapping(Pricing::getTime, reducing(TimeDuration::add))))
.forEach((dayType, time) -> byDayType.put(dayType, time.get()));
TimeDuration openToday = byDayType.get(DayType.valueOf(now));
openNow = (status == IN_OPERATION || status == EXCEPTIONAL_SITUATION)
&& openToday != null
&& openToday.includes(now.toLocalTime());
}
}