package de.accso.flexinale.backoffice.infrastructure.persistence;

import de.accso.flexinale.backoffice.domain.dao.KinoSaalDao;
import de.accso.flexinale.backoffice.domain.model.KinoSaal;
import de.accso.flexinale.backoffice.infrastructure.persistence.mapper.KinoKinoSaalEntity2KinoKinoSaalMapper;
import de.accso.flexinale.common.shared_kernel.Identifiable;

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

@SuppressWarnings("unused")
public class KinoSaalJpaRepositoryDelegate implements KinoSaalDao {

    private final KinoSaalJpaRepository kinoSaalJpaRepository;

    public KinoSaalJpaRepositoryDelegate(final KinoSaalJpaRepository kinoSaalJpaRepository) {
        this.kinoSaalJpaRepository = kinoSaalJpaRepository;
    }

    @Override
    public List<KinoSaal> findAll() {
        List<KinoSaalEntity> kinoSaalEntities = kinoSaalJpaRepository.findAll();

        return kinoSaalEntities.stream()
                .map(KinoKinoSaalEntity2KinoKinoSaalMapper::mapKinoSaal)
                .collect(Collectors.toList());
    }

    @Override
    public Optional<KinoSaal> findById(final Identifiable.Id id) {
        Optional<KinoSaalEntity> kinoSaalEntity = kinoSaalJpaRepository.findById(id.id());
        return KinoKinoSaalEntity2KinoKinoSaalMapper.mapToKinoSaal(kinoSaalEntity);
    }

    @Override
    public KinoSaal save(final KinoSaal kinoSaal) {
        KinoSaalEntity kinoSaalEntity = KinoKinoSaalEntity2KinoKinoSaalMapper.mapKinoSaal(kinoSaal);
        KinoSaalEntity savedEntity = kinoSaalJpaRepository.save(kinoSaalEntity);
        return KinoKinoSaalEntity2KinoKinoSaalMapper.mapKinoSaal(savedEntity);
    }

    @Override
    public void delete(final KinoSaal kinoSaal) {
        KinoSaalEntity kinoSaalEntity = KinoKinoSaalEntity2KinoKinoSaalMapper.mapKinoSaal(kinoSaal);
        kinoSaalJpaRepository.delete(kinoSaalEntity);
    }

    @Override
    public void deleteById(final Identifiable.Id id) {
        kinoSaalJpaRepository.deleteById(id.id());
    }

    @Override
    public void deleteAll() {
        kinoSaalJpaRepository.deleteAll();
    }
}
