package com.supervision.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.supervision.exception.BusinessException;
import com.supervision.model.*;
import com.supervision.model.Process;
import com.supervision.pojo.vo.AskAncillaryResultReqVO;
import com.supervision.service.*;
import com.supervision.util.UserUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.SetUtils;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class AskAncillaryServiceImpl implements AskAncillaryService {

    private final ProcessService processService;

    private final DiseaseAncillaryService diseaseAncillaryService;

    private final ConfigAncillaryItemService ancillaryItemService;

    @Override
    public Map<String, List<ConfigAncillaryItem>> queryAncillaryItemList() {
        List<ConfigAncillaryItem> list = ancillaryItemService.lambdaQuery().list();
        return list.stream().collect(Collectors.groupingBy(ConfigAncillaryItem::getType));
    }

    @Override
    public DiagnosisAncillaryRecord execAskAncillaryResult(AskAncillaryResultReqVO reqVO) {
        // 首先根据process_id查新到流程ID
        Process process = Optional.ofNullable(processService.getById(reqVO.getProcessId())).orElseThrow(() -> new BusinessException("未找到流程ID"));
        // 找到对应的项目的检查结果

        DiseaseAncillary diseaseAncillary = diseaseAncillaryService.lambdaQuery().eq(DiseaseAncillary::getPatientId, process.getPatientId()).eq(DiseaseAncillary::getItemId, reqVO.getItemId())
                .oneOpt().orElseGet(() -> {
                    DiseaseAncillary get = new DiseaseAncillary();
                    get.setResult("无相关资讯");
                    return get;
                });
        DiagnosisAncillaryRecord record = new DiagnosisAncillaryRecord();
        record.setProcessId(process.getId());
        record.setItemId(reqVO.getItemId());
        record.setPrimaryId(reqVO.getPrimaryId());
        record.setResult(diseaseAncillary.getResult());
        record.setCreateUserId(UserUtil.getUser().getId());
        record.setUpdateUserId(UserUtil.getUser().getId());
        return record;
    }
}