package io.choerodon.agile.app.assembler;

import io.choerodon.agile.api.vo.*;
import io.choerodon.agile.infra.dataobject.SprintSearchDTO;
import io.choerodon.agile.infra.dataobject.UserMessageDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by [email protected] on 2018/5/14.
 */
@Component
public class SprintSearchAssembler extends AbstractAssembler {

    @Autowired
    private IssueSearchAssembler issueSearchAssembler;

    public SprintSearchVO dtoToVO(SprintSearchDTO sprintSearchDTO, Map<Long, UserMessageDTO> usersMap, Map<Long, PriorityVO> priorityMap, Map<Long, StatusVO> statusMapDTOMap, Map<Long, IssueTypeVO> issueTypeDTOMap) {
        if (sprintSearchDTO == null) {
            return null;
        }
        SprintSearchVO sprintSearchVO = new SprintSearchVO();
        BeanUtils.copyProperties(sprintSearchDTO, sprintSearchVO);
        if (usersMap != null) {
            sprintSearchVO.setAssigneeIssues(issueSearchAssembler.dtoListToAssigneeIssueVO(sprintSearchDTO.getAssigneeIssueDTOList(), usersMap));
            sprintSearchVO.setIssueSearchVOList(issueSearchAssembler.dtoListToVO(sprintSearchDTO.getIssueSearchDTOList(), usersMap, priorityMap, statusMapDTOMap, issueTypeDTOMap));
        }
        return sprintSearchVO;
    }

    public List<SprintSearchVO> dtoListToVO(List<SprintSearchDTO> sprintSearchDTOS, Map<Long, UserMessageDTO> usersMap, Map<Long, PriorityVO> priorityMap, Map<Long, StatusVO> statusMapDTOMap, Map<Long, IssueTypeVO> issueTypeDTOMap) {
        List<SprintSearchVO> sprintSearchList = new ArrayList<>(sprintSearchDTOS.size());
        sprintSearchDTOS.forEach(sprintSearchDO -> sprintSearchList.add(dtoToVO(sprintSearchDO, usersMap, priorityMap, statusMapDTOMap, issueTypeDTOMap)));
        return sprintSearchList;
    }

}