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

import de.accso.flexinale.domain.model.Kontingent;
import de.accso.flexinale.infrastructure.persistence.KontingentEntity;

import java.util.Optional;

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

public final class KontingentEntity2KontingentMapper {

    public static Kontingent map(final KontingentEntity kontingentEntity) {
        return new Kontingent(kontingentEntity.id(),
                kontingentEntity.version(),
                new Kontingent.RestKontingent(kontingentEntity.getRestKontingentOnline()),
                new Kontingent.RestKontingent(kontingentEntity.getRestKontingentZentral()),
                new Kontingent.RestKontingent(kontingentEntity.getRestKontingentKinokasse()));
    }

    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
    public static Optional<Kontingent> map(final Optional<KontingentEntity> optionalKontingentEntity) {
        if (optionalKontingentEntity.isEmpty()) {
            return Optional.empty();
        }
        else {
            KontingentEntity kontingentEntity = optionalKontingentEntity.get();
            return Optional.of(map(kontingentEntity));
        }
    }

    public static KontingentEntity map(final Kontingent kontingent) {
        return new KontingentEntity(kontingent.id().id(),
                kontingent.version().version(),
                getRawOrNull(kontingent.getRestKontingentOnline()),
                getRawOrNull(kontingent.getRestKontingentZentral()),
                getRawOrNull(kontingent.getRestKontingentKinokasse()));
    }
}
