package de.accso.flexinale.application;

import de.accso.flexinale.data.model.Benutzer;
import de.accso.flexinale.data.model.Film;
import de.accso.flexinale.data.model.Vorfuehrung;
import de.accso.flexinale.data.persistence.FilmDao;
import de.accso.flexinale.data.persistence.TicketDao;
import de.accso.flexinale.data.persistence.VorfuehrungDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
@SuppressWarnings("unused")
public class FilmService {

    @Autowired
    private FilmDao filmDao;

    @Autowired
    private VorfuehrungDao vorfuehrungDao;

    @Autowired
    private TicketDao ticketDao;

    public List<Film> filme() {
        return filmDao.findAll();
    }

    public Film film(String id) {
        return filmDao.findById(id).orElse(null);
    }

    public List<Vorfuehrung> vorfuehrungenFuer(String filmId) {
        return vorfuehrungDao.findByFilmId(filmId);
    }

    public List<String> vorfuehrungenMitUeberlapp(final List<Vorfuehrung> vorfuehrungen, final Benutzer benutzer) {
        List<String> vorfuehrungenMitUeberlapp = new ArrayList<>();

        TicketBundle ticketBundle = new TicketBundle(benutzer, ticketDao);

        for (Vorfuehrung vorfuehrung : vorfuehrungen) {
            if (ticketBundle.mindestensEinTicketImTicketBundleUeberlapptMit(vorfuehrung)) {
                vorfuehrungenMitUeberlapp.add(vorfuehrung.id);
            }
        }
        return vorfuehrungenMitUeberlapp;
    }

    public List<String> vorfuehrungenFuerDieDerBenutzerEinTicketHat(final List<Vorfuehrung> vorfuehrungen, final Benutzer benutzer) {
        List<String> vorfuehrungenMitTicket = new ArrayList<>();

        TicketBundle ticketBundle = new TicketBundle(benutzer, ticketDao);

        for (Vorfuehrung vorfuehrung : vorfuehrungen) {
            if (ticketBundle.hatSchonTicketFuer(vorfuehrung)) {
                vorfuehrungenMitTicket.add(vorfuehrung.id);
            }
        }
        return vorfuehrungenMitTicket;
    }
}
