package com.sn.sowsysrestapi.api.converter;

import com.sn.sowsysrestapi.api.dto.CurrentTaskDTO;
import com.sn.sowsysrestapi.api.dto.CurrentTaskWithNoReportDTO;
import com.sn.sowsysrestapi.api.dto.input.CurrentTaskInputDTO;
import com.sn.sowsysrestapi.domain.entity.CurrentTask;
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 CurrentTaskConverter implements Converter<CurrentTask, CurrentTaskDTO, CurrentTaskInputDTO> {

    @Autowired
    private ModelMapper modelMapper;

    @Override
    public CurrentTask toEntity(CurrentTaskInputDTO currentTaskInputDTO) {
        return modelMapper.map(currentTaskInputDTO, CurrentTask.class);
    }

    @Override
    public CurrentTaskDTO toDto(CurrentTask currentTask) {
        return modelMapper.map(currentTask, CurrentTaskDTO.class);
    }


    public CurrentTaskWithNoReportDTO toBasicInfoDto(CurrentTask currentTask) {
        return modelMapper.map(currentTask, CurrentTaskWithNoReportDTO.class);
    }

    @Override
    public List<CurrentTaskDTO> toCollectionDTO(List<CurrentTask> currentTaskList) {
        return currentTaskList.stream()
                .map(currentTask -> toDto(currentTask))
                .collect(Collectors.toList());
    }

    public void copyToEntity(CurrentTaskInputDTO currentTaskInputDTO, CurrentTask currentTask) {

        currentTask.setReport(new Report());

        modelMapper.map(currentTaskInputDTO, currentTask);

    }

}
