package com.sn.sowsysrestapi.api.converter;

import com.sn.sowsysrestapi.api.dto.NextPeriodTaskDTO;
import com.sn.sowsysrestapi.api.dto.input.NextPeriodTaskInputDTO;
import com.sn.sowsysrestapi.domain.entity.NextPeriodTask;
import com.sn.sowsysrestapi.domain.entity.Report;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

@Component
public class NextPeriodTaskConverter implements Converter<NextPeriodTask, NextPeriodTaskDTO, NextPeriodTaskInputDTO> {

    @Autowired
    private ModelMapper modelMapper;

    @Override
    public NextPeriodTask toEntity(NextPeriodTaskInputDTO nextPeriodTaskInputDTO) {

        return modelMapper.map(nextPeriodTaskInputDTO, NextPeriodTask.class);
    }

    @Override
    public NextPeriodTaskDTO toDto(NextPeriodTask nextPeriodTask) {

        return modelMapper.map(nextPeriodTask, NextPeriodTaskDTO.class);
    }

    @Override
    public List<NextPeriodTaskDTO> toCollectionDTO(List<NextPeriodTask> nextPeriodTaskList) {

        return nextPeriodTaskList.stream()
                .map(nextPeriodTask -> toDto(nextPeriodTask))
                .collect(Collectors.toList());
    }

    public void copyToEntity(NextPeriodTaskInputDTO nextPeriodTaskInputDTO, NextPeriodTask nextPeriodTask) {

        nextPeriodTask.setReport(new Report());

        modelMapper.map(nextPeriodTaskInputDTO, nextPeriodTask);
    }

}
