package de.accso.flexinale.besucherportal.infrastructure;

import de.accso.flexinale.backoffice_api_contract.api_contract.FilmRetriever;
import de.accso.flexinale.backoffice_api_contract.api_contract.KinoRetriever;
import de.accso.flexinale.backoffice_api_contract.api_contract.VorfuehrungRetriever;
import de.accso.flexinale.besucherportal.application.services.FilmService;
import de.accso.flexinale.besucherportal.application.services.KinoService;
import de.accso.flexinale.besucherportal.application.services.VorfuehrungService;
import de.accso.flexinale.common.application.Config;
import de.accso.flexinale.ticketing_api_contract.api_contract.TicketRetriever;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FlexinaleBesucherPortalSpringFactory {

    @Bean
    public FilmService createBesucherPortalFilmService(final FilmRetriever filmRetriever,
                                                       final VorfuehrungRetriever vorfuehrungRetriever,
                                                       final TicketRetriever ticketRetriever,
                                                       final VorfuehrungService vorfuehrungService,
                                                       final Config config) {
        return new FilmService(filmRetriever, vorfuehrungRetriever, ticketRetriever, vorfuehrungService,
                config.getMinZeitZwischenVorfuehrungenInMinuten());
    }

    @Bean
    public KinoService createBesucherPortalKinoService(final KinoRetriever kinoRetriever) {
        return new KinoService(kinoRetriever);
    }

    @Bean
    public VorfuehrungService createBesucherPortalVorfuehrungService() {
        return new VorfuehrungService();
    }
}
