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.WorkOrderSparepartDTO;
import com.eksad.masterdata.domain.workorder.WorkOrderSparepart;

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

public class WorkOrderSparepartAssembler implements IObjectAssembler<WorkOrderSparepart, WorkOrderSparepartDTO> {

    @Override
    public WorkOrderSparepartDTO toDTO(WorkOrderSparepart domainObject) {
        WorkOrderSparepartDTO dto = new WorkOrderSparepartDTO();
        dto.setWorkOrderSparepartID(domainObject.getWoSparepartID());
        dto.setPartID(domainObject.getPartID());
        dto.setQty(domainObject.getQty());
        dto.setC2(domainObject.getC2());
        dto.setDiscount(domainObject.getDiscount());
        dto.setTotal(domainObject.getTotal());
        dto.setWoID(domainObject.getWoID());
        dto.setSource(domainObject.getSource());
        dto.setKPB(domainObject.getKPB());
        dto.setPpnamount(domainObject.getPpnAmount());
        dto.setPpnrate(domainObject.getPpnRate());
        dto.setHarga(domainObject.getHarga());
        dto.setClaimDiscount(domainObject.getClaimDiscount());
        dto.setPpnrate(domainObject.getPpnRate());
        dto.setPpnamount(domainObject.getPpnAmount());
        dto.setWorkOrderServiceCreationalDTO(domainObject.getWorkOrderServiceCreational() == null ? new CreationalSpecificationDTO() : new CreationalSpecificationDTOAssembler().toDTO(domainObject.getWorkOrderServiceCreational()));
        return dto;
    }

    @Override
    public WorkOrderSparepart toDomain(WorkOrderSparepartDTO dtoObject) {
        WorkOrderSparepart data = new WorkOrderSparepart();
        data.setWoSparepartID(dtoObject.getWorkOrderSparepartID());
        data.setPartID(dtoObject.getPartID());
        data.setQty(dtoObject.getQty());
        data.setC2(dtoObject.getC2());
        data.setDiscount(dtoObject.getDiscount());
        data.setTotal(dtoObject.getTotal());
        data.setWoID(dtoObject.getWoID());
        data.setSource(dtoObject.getSource());
        data.setKPB(dtoObject.getKPB());
        data.setPpnAmount(dtoObject.getPpnamount());
        data.setPpnRate(dtoObject.getPpnrate());
        data.setHarga(dtoObject.getHarga());
        data.setClaimDiscount(dtoObject.getClaimDiscount());
        data.setPpnRate(dtoObject.getPpnrate());
        data.setPpnAmount(dtoObject.getPpnamount());
        data.setWorkOrderServiceCreational(dtoObject.getWorkOrderServiceCreationalDTO() == null ? new CreationalSpecificationDTOAssembler().toDomain(new CreationalSpecificationDTO().getInstance()) : new CreationalSpecificationDTOAssembler().toDomain(dtoObject.getWorkOrderServiceCreationalDTO()));
        return data;
    }


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

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

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

    public List<WorkOrderSparepart> toDomainInList(List<WorkOrderSparepartDTO> arg0) {
        List<WorkOrderSparepart> res = new ArrayList<>();
        arg0.stream().forEach((o) -> {
            res.add(toDomain(o));
        });
        return res;
    }
}