package thyyxxk.webserver.service.zhuyuanyisheng;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Service;
import thyyxxk.webserver.dao.his.zhuyuanyisheng.sendDocker.SendDockerPromptDao;
import thyyxxk.webserver.dao.his.zhuyuanyisheng.sendDocker.SendDockerReadDao;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.zhuyuanyisheng.sendPatientPrompt.dto.SendDockerPrompt;
import thyyxxk.webserver.entity.zhuyuanyisheng.sendPatientPrompt.dto.SendDockerRead;
import thyyxxk.webserver.utils.*;

import java.util.Date;
import java.util.List;

@Service
@RequiredArgsConstructor
@Slf4j
public class SendDockerPromptService {
    private final SendDockerPromptDao dao;

    @Data
    public static class SavePrompt {
        private String patNo;
        private Integer times;
        private String doctorCode;

        private List<SavePromptList> list;
    }

    @Data
    public static class SavePromptList {
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
        private Date date;
        private String prompt;
    }

    public ResultVo<List<SendDockerPrompt>> getSendDockerPrompt(String patNo, Integer times) {
        return R.ok(dao.selectPatPrompt(patNo, times, DateUtil.formatDate(new Date(), DateUtil.DATE), TokenUtil.getInstance().getTokenUserId()));
    }

    public void sendPrompt(SavePrompt params) {
        // 将params.getPrompt()中的元素批量插入到SendDockerPromptDao表中
        ListUtil.batchList(params.getList(), SendDockerPromptDao.class, (m, i) -> {
            // 创建SendDockerPrompt对象
            SendDockerPrompt build = SendDockerPrompt.builder().build();
            // 设置SendDockerPrompt对象的id属性
            build.setId(SnowFlakeId.instance().nextId());
            // 设置SendDockerPrompt对象的patNo属性
            build.setPatNo(params.getPatNo());
            // 设置SendDockerPrompt对象的times属性
            build.setTimes(params.getTimes());
            // 设置SendDockerPrompt对象的prompt属性
            build.setPrompt(i.getPrompt());
            build.setPromptTime(i.getDate());
            // 设置SendDockerPrompt对象的dockerCode属性
            build.setDoctorCode(params.getDoctorCode());
            // 将SendDockerPrompt对象插入到SendDockerPromptDao表中
            m.insert(build);
        });
    }

    public ResultVo<String> readPrompt(List<String> ids) {
        // 获取当前用户的token
        String code = TokenUtil.getInstance().getTokenUserId();
        // 将ids列表批量处理
        ListUtil.batchList(ids, SendDockerReadDao.class, (m, i) -> {
            // 创建SendDockerRead对象
            SendDockerRead build = SendDockerRead.builder()
                    // 设置id
                    .id(SnowFlakeId.instance().nextId())
                    // 设置sendId
                    .sendId(i)
                    // 设置dockerCode
                    .doctorCode(code)
                    // 构建对象
                    .build();
            m.insert(build);
        });
        // 返回成功结果
        return R.ok();
    }

}
