package de.accso.flexinale.backoffice.application.services;

import de.accso.flexinale.backoffice.application.services.mapper.Vorfuehrung2VorfuehrungTOMapper;
import de.accso.flexinale.backoffice.domain.dao.VorfuehrungDao;
import de.accso.flexinale.backoffice.domain.model.Vorfuehrung;
import de.accso.flexinale.backoffice_api_contract.api_contract.VorfuehrungRetriever;
import de.accso.flexinale.backoffice_api_contract.api_contract.model.VorfuehrungTO;
import de.accso.flexinale.common.shared_kernel.Identifiable;
import jakarta.transaction.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Transactional
public class VorfuehrungRetrieverService implements VorfuehrungRetriever {

    private final VorfuehrungDao vorfuehrungDao;

    public VorfuehrungRetrieverService(VorfuehrungDao vorfuehrungDao) {
        this.vorfuehrungDao = vorfuehrungDao;
    }

    @Override
    public VorfuehrungTO vorfuehrung(final Identifiable.Id id) {
        Optional<Vorfuehrung> vorfuehrungOptional = vorfuehrungDao.findById(id);
        return vorfuehrungOptional.map(Vorfuehrung2VorfuehrungTOMapper::map).orElse(null);
    }

    @Override
    public List<VorfuehrungTO> vorfuehrungenByFilmId(final Identifiable.Id filmId) {
        List<Vorfuehrung> vorfuehrungen = vorfuehrungDao.findByFilmId(filmId);
        return vorfuehrungen.stream().map(Vorfuehrung2VorfuehrungTOMapper::map)
                .collect(Collectors.toCollection(ArrayList::new));
    }
}
