package com.yihu.wlyy.service.app.archives;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.patient.PatientEvent;
import com.yihu.wlyy.entity.patient.PatientEventImg;
import com.yihu.wlyy.repository.patient.PatientEventDao;
import com.yihu.wlyy.repository.patient.PatientEventImgDao;
import com.yihu.wlyy.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * Created by hzp on 2016/11/25.
 * 患者就诊事件管理
 */
@Service
public class PatientEventService {


    @Autowired
    private PatientEventDao patientEventDao;

    @Autowired
    private PatientEventImgDao patientEventImgDao;




    /**
     * 获取就诊事件详情
     */
    public JSONObject getEventDetail(String id) throws Exception
    {
        JSONObject re = new JSONObject();
        PatientEvent event = patientEventDao.findOne(Long.valueOf(id));
        if(event!=null)
        {
            re =  new JSONObject(event);
            List<PatientEventImg> list = patientEventImgDao.findByEventId(event.getId());
            re.put("eventImg",list);
        }
        else{
            throw new Exception("不存在该就诊事件！");
        }


        return re;
    }

    /**
     * 删除就诊事件
     */
    @Transactional
    public void deleteEvent(Long eventId) throws Exception
    {
        PatientEvent event = patientEventDao.findOne(eventId);
        if(event!=null)
        {
            List<PatientEventImg> list = patientEventImgDao.findByEventId(eventId);
            if(list!=null && list.size()>0)
            {
                patientEventImgDao.delete(list);
            }
            patientEventDao.delete(event);
        }
        else{
            throw new Exception("不存在该就诊事件！");
        }
    }

    /**
     * 保存就诊事件详情
     */
    @Transactional
    public void saveEventDetail(String data) throws Exception
    {
        JSONObject json = new JSONObject(data);
        PatientEvent event = new PatientEvent();
        if(!StringUtils.isEmpty(json.optString("id")))
        {
            //判断是否存在
            event =patientEventDao.findOne(json.getLong("id"));
            if(event==null)
            {
                throw new Exception("不存在该就诊事件！");
            }
        }
        else{
            event.setCreateTime(new Date());
        }
        event.setPatient(json.optString("patient"));
        event.setEventDate(DateUtil.strToDate(json.optString("eventDate")));
        event.setEventType(json.optString("eventType"));
        event.setOrgCode(json.optString("orgCode"));
        event.setOrgName(json.optString("orgName"));
        event.setDeptCode(json.optString("deptCode"));
        event.setDeptName(json.optString("deptName"));
        event.setDianosis(json.optString("dianosis"));
        event.setDoctorCode(json.optString("doctorCode"));
        event.setDoctorName(json.optString("doctorName"));

        //保存就诊记录
        patientEventDao.save(event);

        if(event.getId() != null) {
            //修改时先删除原有图片
            List<PatientEventImg> imgList = patientEventImgDao.findByEventId(event.getId());
            if(imgList!=null && imgList.size()>0)
            {
                patientEventImgDao.delete(imgList);
            }
        }

        //保存就诊记录相关图片
        JSONArray array = json.getJSONArray("eventImg");
        if(array!=null && array.length()>0)
        {
            List<PatientEventImg> imgList = new ArrayList<>();
            for(int i=0;i<array.length();i++)
            {
                JSONObject item = array.getJSONObject(i);
                PatientEventImg img = new PatientEventImg();
                img.setCreateTime(new Date());
                img.setEventId(event.getId());
                // 图片类型（病历/处方/病理报告/检查报告/检验报告/其他）
                img.setImgType(item.optString("imgType"));
                // 图片标签
                img.setImgLabel(item.optString("imgLabel"));
                // 图片说明
                img.setImgContent(item.optString("imgContent"));
                // 图片路径
                img.setImgUrl(item.optString("imgUrl"));

                imgList.add(img);
            }
            patientEventImgDao.save(imgList);
        }

    }

    /**
     * 删除就诊事件图片
     */
    public void deleteEventImg(Long id) throws Exception
    {
        PatientEventImg eventImg = patientEventImgDao.findOne(id);
        if(eventImg!=null)
        {
            patientEventImgDao.delete(eventImg);
        }
        else{
            throw new Exception("not exit image!id:"+id);
        }

    }

    /**
     * 新增就诊事件图片
     */
    public void addEventImg(Long eventId,String imgType,String imgLabel,String imgUrl) throws Exception
    {
        PatientEvent event = patientEventDao.findOne(eventId);
        if(event!=null) {
            PatientEventImg img = new PatientEventImg();

            img.setCreateTime(new Date());
            img.setEventId(eventId);
            // 图片类型（病历/处方/病理报告/检查报告/检验报告/其他）
            img.setImgType(imgType);
            // 图片标签
            img.setImgLabel(imgLabel);
            // 图片路径
            img.setImgUrl(imgUrl);

            patientEventImgDao.save(img);
        }
        else{
            throw new Exception("not exit event!id:"+eventId);
        }
    }

    /**
     * 修改就诊事件图片
     */
    public void editEventImg(Long id,String imgType,String imgLabel) throws Exception
    {
        PatientEventImg img = patientEventImgDao.findOne(id);
        if(img!=null)
        {
            // 图片类型（病历/处方/病理报告/检查报告/检验报告/其他）
            img.setImgType(imgType);
            // 图片标签
            img.setImgLabel(imgLabel);
            patientEventImgDao.save(img);
        }
        else{
            throw new Exception("not exit image!id:"+id);
        }
    }
}
