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

import de.accso.flexinale.backoffice.domain.model.Film;
import de.accso.flexinale.backoffice.infrastructure.persistence.FilmEntity;

import java.util.Optional;

import static de.accso.flexinale.common.shared_kernel.RawWrapper.getRawOrNull;

public final class FilmEntity2FilmMapper {

    public static Film map(final FilmEntity filmEntity) {
        return new Film(filmEntity.id(), filmEntity.version(),
                new Film.Titel(filmEntity.titel),
                new Film.ImdbUrl(filmEntity.imdbUrl),
                new Film.DauerInMinuten(filmEntity.dauerInMinuten));
    }

    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
    public static Optional<Film> map(final Optional<FilmEntity> optionalFilmEntity) {
        if (optionalFilmEntity.isEmpty()) {
            return Optional.empty();
        }
        else {
            FilmEntity filmEntity = optionalFilmEntity.get();
            return Optional.of(map(filmEntity));
        }
    }

    public static FilmEntity map(final Film film) {
        return new FilmEntity(film.id().id(), film.version().version(),
                getRawOrNull(film.titel), getRawOrNull(film.imdbUrl), getRawOrNull(film.dauerInMinuten));
    }
}
