package thyyxxk.webserver.service.datamodify;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import thyyxxk.webserver.config.exception.ExceptionEnum;
import thyyxxk.webserver.dao.his.datamodify.YzTemperatureDao;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
import thyyxxk.webserver.entity.datamodify.YzTemperature;
import thyyxxk.webserver.utils.ResultVoUtil;
import thyyxxk.webserver.utils.TokenUtil;

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

/**
 * <p>
 * 描述： 查询并修改护理记录单
 * 这个坑爹的数据库结构，我人都傻了。
 * </p>
 *
 * @author xc
 * @date 2021-04-12 17:44
 */
@Service
@Slf4j
public class YzTemperatureService {

    private final YzTemperatureDao dao;

    @Autowired
    public YzTemperatureService(YzTemperatureDao dao) {
        this.dao = dao;
    }

    /**
     * @param date        日期
     * @param inpatientNo 住院号
     * @param admissTimes 住院次数
     * @return 返回一条护理记录单
     */
    public ResultVo<YzTemperature> queryYzTemperature(String date, String inpatientNo, Integer admissTimes) {
        //根据空格来分割日期字符串
        String[] splitStringDate = date.split(" ");

        String toStringRecDate = splitStringDate[0];
        String toStringRecTime = splitStringDate[1];

        log.info("查询护理记录单 --> 操作人：{}，住院号：{}，住院次数：{}，日期：{},时间：{}",
                TokenUtil.getInstance().getTokenUserId(), inpatientNo, admissTimes, toStringRecDate, toStringRecTime);

        List<YzTemperature> list = dao.queryDetails(toStringRecDate, toStringRecTime, inpatientNo, admissTimes);

        if (list.size() > 0) {
            StringBuilder splicingOtherInfo = new StringBuilder();
            YzTemperature pojo = new YzTemperature();
            for (int i = 0; i < list.size(); i++) {
                if (i == 0) {
                    pojo = list.get(0);
                    //坑爹的1900年的 日期 传到前端会少几分钟 所以我直接把前面能够搜索到的条件变成
                    pojo.setToStringRecDate(toStringRecDate);
                    pojo.setToStringRecTime(toStringRecTime);
                }
                //拼接字符串 把otherInfo 拼起来
                splicingOtherInfo.append(list.get(i).getOtherInfo());
            }
            // 去掉字符串中的 空格 并放入 护理记录单 的 病情观察 护理措施及效果 字段
            pojo.setSplicingOtherInfo(splicingOtherInfo.toString().replace(" ", ""));
            return ResultVoUtil.success(pojo);
        }
        return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
    }

    /**
     * 更新重要的数据
     *
     * @param param 根据 住院号 住院次数 日期 时间
     *              现在能修改的字段有 体温：temperature1 脉搏：pulse1 呼吸：breathe1
     *              血压am： pressure1Am， 血压pm：pressure1Pm  spo2：spo2 意识：mind 皮肤：skin
     *              管道名称：tubesName 管道状态：tubesStatus  病区：ward
     *              这里需要分开来 更新 重要的信息 都在第一条
     *              下面的都只是为了保存病室 和 修改人 修改时间
     * @return 返回状态
     */
    public ResultVo<Boolean> modify(YzTemperature param) {
        //查询出原来的 数据
        List<YzTemperature> list = dao.queryDetails(param.getToStringRecDate(), param.getToStringRecTime(),
                param.getInpatientNo(), param.getAdmissTimes());
        //修改人和修改时间
        param.setModifyUserid(TokenUtil.getInstance().getTokenUserId());
        param.setModifyTime(new Date());

        param.setDetailNo(list.get(0).getDetailNo());
        //修改前的数据
        YzTemperature pojo = list.get(0);
        //这个是修改护理记录单我已知的部分，因为护理记录单很坑爹所以，这个是头部是护理记录单的主要信息，下面是用来更新科室和病情观察护理措施及效果
        // dao.teperatureHead(param); 现在还不让更改别的地方 所以只能更新护理记录单的科室
        dao.teperatureBody(param, list);
        log.info("护理记录单修改前 --> 操作人：{}，病区：{}",
                TokenUtil.getInstance().getTokenUserId(), pojo.getWard());
        log.info("修改护理记录单后 --> 操作人：{}，病区：{}",
                TokenUtil.getInstance().getTokenUserId(), param.getWard());
        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_MESSAGE, "修改成功，L('ω')┘三└('ω')｣");
    }

    /**
     * 获取病房
     *
     * @return 返回病房的code 和 name
     */
    public ResultVo<List<GetDropdownBox>> getWard() {
        return ResultVoUtil.success(dao.getWard());
    }
}
