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

import de.accso.flexinale.backoffice.application.services.mapper.Film2FilmTOMapper;
import de.accso.flexinale.backoffice.domain.dao.FilmDao;
import de.accso.flexinale.backoffice.domain.model.Film;
import de.accso.flexinale.backoffice_api_contract.api_contract.FilmRetriever;
import de.accso.flexinale.backoffice_api_contract.api_contract.model.FilmTO;
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 FilmRetrieverService implements FilmRetriever {

    private final FilmDao filmDao;

    public FilmRetrieverService(final FilmDao filmDao) {
        this.filmDao = filmDao;
    }

    @Override
    public FilmTO film(final Identifiable.Id id) {
        Optional<Film> filmOptional = filmDao.findById(id);
        return filmOptional.map(Film2FilmTOMapper::map).orElse(null);
    }

    @Override
    public List<FilmTO> filme() {
        List<Film> filme = filmDao.findAll();
        return filme.stream().map(Film2FilmTOMapper::map)
                .collect(Collectors.toCollection(ArrayList::new));
    }
}
