package de.accso.flexinale.domain.services;

import de.accso.flexinale.domain.dao.TicketDao;
import de.accso.flexinale.domain.model.Besucher;
import de.accso.flexinale.domain.model.Ticket;
import de.accso.flexinale.domain.model.Vorfuehrung;

import java.util.List;

public class TicketBundle {

    private final Besucher besucher;

    private final TicketDao ticketDao;

    private final long minZeitZwischenVorfuehrungenInMinuten;

    public TicketBundle(final Besucher besucher, final TicketDao ticketDao, final long minZeitZwischenVorfuehrungenInMinuten) {
        this.besucher = besucher;
        this.ticketDao = ticketDao;
        this.minZeitZwischenVorfuehrungenInMinuten = minZeitZwischenVorfuehrungenInMinuten;
    }

    public boolean mindestensEinTicketImTicketBundleUeberlapptMit(final Vorfuehrung vorfuehrung) {
        List<Ticket> tickets = ticketDao.findByBesucherOrderByZeit(besucher);
        return tickets.stream().anyMatch(ticket ->
                ticket.vorfuehrung.ueberlapptMit(vorfuehrung, minZeitZwischenVorfuehrungenInMinuten));
    }

    public boolean hatSchonTicketFuer(final Vorfuehrung vorfuehrung) {
        List<Ticket> tickets = ticketDao.findByBesucherOrderByZeit(besucher);
        return tickets.stream()
                .map(ticket -> ticket.vorfuehrung).toList().contains(vorfuehrung);
    }
}
