package de.accso.flexinale.application;

import de.accso.flexinale.data.model.Benutzer;
import de.accso.flexinale.data.model.Ticket;
import de.accso.flexinale.data.model.Vorfuehrung;
import de.accso.flexinale.data.persistence.TicketDao;
import de.accso.flexinale.util.Config;

import java.util.List;

public class TicketBundle {

    private final Benutzer benutzer;

    private final TicketDao ticketDao;

    private final long minZeitZwischenVorfuehrungenInMinuten = Config.MIN_ZEIT_ZWISCHEN_VORFUEHRUNGEN_IN_MINUTEN;

    public TicketBundle(final Benutzer benutzer, final TicketDao ticketDao) {
        this.benutzer = benutzer;
        this.ticketDao = ticketDao;
    }

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

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