package com.eksad.masterdata.domain.assembler;

import com.eksad.ddms.common.dto.CreationalSpecificationDTO;
import com.eksad.ddms.common.util.object.IObjectAssembler;
import com.eksad.ddms.common.util.status.DataStatus;
import com.eksad.masterdata.common.dto.PromoUnitBerlakuDTO;
import com.eksad.masterdata.domain.CreationalSpecification;
import com.eksad.masterdata.domain.PromoUnitBerlaku;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class PromoUnitBerlakuAssembler implements IObjectAssembler<PromoUnitBerlaku, PromoUnitBerlakuDTO> {

    @Override
    public PromoUnitBerlakuDTO toDTO(PromoUnitBerlaku x) {
        return new PromoUnitBerlakuDTO(
                x.getPromoUnitBerlakuID(),
                x.getUnitCategoryID(),
                x.getUnitCategoryName(),
                x.getUnitSeriesID(),
                x.getUnitSeriesName(),
                x.getUnitTypeID(),
                x.getUnitTypeName(),
                x.getPromoID(),
                x.getPromoUnitBerlakuStatus(),
                x.getSource(),
                x.getPromoUnitBerlakuCreational() == null ? new CreationalSpecificationDTO() : new CreationalSpecificationDTOAssembler().toDTO(x.getPromoUnitBerlakuCreational()));

    }

    @Override
    public PromoUnitBerlaku toDomain(PromoUnitBerlakuDTO y) {
        return new PromoUnitBerlaku(
                y.getPromoUnitBerlakuID(),
                y.getUnitCategoryID(),
                y.getUnitCategoryName(),
                y.getUnitSeriesID(),
                y.getUnitSeriesName(),
                y.getUnitTypeID(),
                y.getUnitTypeName(),
                y.getPromoID(),
                y.getPromoUnitBerlakuStatus(),
                y.getSource(),
                y.getPromoUnitBerlakuCreationalDTO() == null ? new CreationalSpecification() : new CreationalSpecificationDTOAssembler().toDomain(y.getPromoUnitBerlakuCreationalDTO())
        );
    }

    public List<PromoUnitBerlakuDTO> toDTOs(Set<PromoUnitBerlaku> arg0) {
        List<PromoUnitBerlakuDTO> res = new ArrayList<>();
        arg0.stream().filter(o -> DataStatus.ACTIVE.equals(o.getPromoUnitBerlakuStatus())).forEach((o) -> {
            res.add(toDTO(o));
        });
        return res;
    }

    public List<PromoUnitBerlakuDTO> toDTOs(List<PromoUnitBerlaku> arg0) {
        List<PromoUnitBerlakuDTO> res = new ArrayList<>();
        arg0.stream().filter(o -> DataStatus.ACTIVE.equals(o.getPromoUnitBerlakuStatus())).forEach((o) -> {
            res.add(toDTO(o));
        });
        return res;
    }

    public Set<PromoUnitBerlaku> toDomains(List<PromoUnitBerlakuDTO> arg0) {
        Set<PromoUnitBerlaku> res = new HashSet<>();
        arg0.stream().forEach((o) -> {
            res.add(toDomain(o));
        });
        return res;
    }
}