package com.eksad.masterdata.domain.assembler;

import com.eksad.ddms.common.dto.CreationalSpecificationDTO;
import com.eksad.ddms.common.util.object.IObjectAssembler;
import com.eksad.masterdata.common.dto.PromoWorkOrderDetailDTO;
import com.eksad.masterdata.domain.workorder.PromoWorkOrderDetail;

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

public class PromoWorkOrderDetailAssembler implements IObjectAssembler<PromoWorkOrderDetail, PromoWorkOrderDetailDTO> {
    @Override
    public PromoWorkOrderDetailDTO toDTO(PromoWorkOrderDetail domainObject) {
        PromoWorkOrderDetailDTO dto = new PromoWorkOrderDetailDTO();
        dto.setPromoWoID(domainObject.getPromoWoID());
        dto.setWoID(domainObject.getWoID());
        dto.setAhassID(domainObject.getAhassID());
        dto.setType(domainObject.getType());
        dto.setReferenceID(domainObject.getReferenceID());
        dto.setValue(domainObject.getValue());
        dto.setStatus(domainObject.getStatus());
        dto.setIsManualPromo(domainObject.getIsManualPromo());
        dto.setPromoWoDetailCreationalDTO(domainObject.getPromoWoDetailCreational() == null ? new CreationalSpecificationDTO() : new CreationalSpecificationDTOAssembler().toDTO(domainObject.getPromoWoDetailCreational()));
        return dto;
    }

    @Override
    public PromoWorkOrderDetail toDomain(PromoWorkOrderDetailDTO dtoObject) {
        PromoWorkOrderDetail data = new PromoWorkOrderDetail();
        data.setPromoWoID(dtoObject.getPromoWoID());
        data.setWoID(dtoObject.getWoID());
        data.setAhassID(dtoObject.getAhassID());
        data.setType(dtoObject.getType());
        data.setReferenceID(dtoObject.getReferenceID());
        data.setValue(dtoObject.getValue());
        data.setStatus(dtoObject.getStatus());
        data.setIsManualPromo(dtoObject.getIsManualPromo());
        data.setPromoWoDetailCreational(dtoObject.getPromoWoDetailCreationalDTO() == null ? new CreationalSpecificationDTOAssembler().toDomain(new CreationalSpecificationDTO().getInstance()) : new CreationalSpecificationDTOAssembler().toDomain(dtoObject.getPromoWoDetailCreationalDTO()));
        return data;
    }

    public List<PromoWorkOrderDetailDTO> toDTOs(Set<PromoWorkOrderDetail> arg0) {
        List<PromoWorkOrderDetailDTO> res = new ArrayList<>();
        arg0.stream().forEach((o) -> {
            res.add(toDTO(o));
        });
        return res;
    }

    public List<PromoWorkOrderDetailDTO> toDTOs(List<PromoWorkOrderDetail> arg0) {
        List<PromoWorkOrderDetailDTO> res = new ArrayList<>();
        arg0.stream().forEach((o) -> {
            res.add(toDTO(o));
        });
        return res;
    }

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