package com.yihu.wlyy.web.doctor.message;

import com.yihu.wlyy.entity.message.Message;
import io.swagger.annotations.Api;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.service.app.message.MessageService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.web.BaseController;

@Controller
@RequestMapping(value = "/doctor/message")
@Api(description = "医生端-消息")
public class DoctorMessageController extends BaseController {

	@Autowired
	private MessageService messageService;

	/**
	 * 医生消息总数统计接口
	 * @return
	 */
	@RequestMapping(value = "amount")
	@ResponseBody
	public String amount() {
		try {
			JSONObject json = messageService.findDoctorAllMessageAmount(getUID());
			if (json == null) {
				return error(-1, "获取消息总数失败！");
			} else {
				return write(200, "获取消息总数成功！", "data", json);
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "获取消息总数失败！");
		}
	}

	/**
	 * 医生消息总数统计接口
	 * @return
	 */
	@RequestMapping(value = "messages")
	@ResponseBody
	public String messages() {
		try {
			JSONObject json = messageService.findDoctorAllMessage(getUID());
			if (json == null) {
				return error(-1, "获取消息总数失败！");
			} else {
				return write(200, "获取消息总数成功！", "data", json);
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "获取消息总数失败！");
		}
	}

	/**
	 * 健康咨询消息列表查询接口
	 * @param id
	 * @param pagesize 分页大小
	 * @return
	 */
	@RequestMapping(value = "consults")
	@ResponseBody
	public String consultList(long id, int pagesize) {
		try {
			JSONArray array = new JSONArray();
			Page<ConsultTeam> list = messageService.findConsultListByDoctor(getUID(), id, pagesize);
			for (ConsultTeam consult : list) {
				if (consult == null) {
					continue;
				}
				JSONObject json = new JSONObject();
				json.put("id", consult.getId());
				// 设置咨询标识
				json.put("consult", consult.getConsult());
				// 设置患者标识
				json.put("patient", consult.getPatient());
				// 设置患者头像
				json.put("photo", consult.getPhoto());
				// 设置主要症状
				json.put("symptoms", consult.getSymptoms());
				// 设置患者姓名
				json.put("name", consult.getName());
				// 设置状态（0进行中，1已完成，-1患者取消）
				json.put("status", consult.getStatus());
				// 设置消息未读数量
				json.put("unread", consult.getDoctorRead());
				// 设置咨询时间
				json.put("time", DateUtil.dateToStr(consult.getCzrq(), DateUtil.YYYY_MM_DD_HH_MM_SS));
				array.put(json);
			}
			return write(200, "获取健康咨询列表成功！", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取健康咨询列表失败！");
		}
	}

	/**
	 * 体征指标消息查询接口
	 * @param id
	 * @param pagesize
	 * @param isRead 1未读，0已读
	 * @return
	 */
	@RequestMapping(value = "health")
	@ResponseBody
	public String health(long id, int pagesize, @RequestParam(required = false) String isRead) {
		try {
			JSONArray array = new JSONArray();
			Page<Message> list = messageService.findHealthListByDoctor(getUID(), id, pagesize, isRead);
			for (Message msg : list) {
				if (msg == null) {
					continue;
				}
				JSONObject json = new JSONObject();
				// 消息ID
				json.put("id", msg.getId());
				// 发送人标识
				json.put("sender", msg.getSender());
				// 发送人姓名
				json.put("senderName", msg.getSenderName());
				// 发送人头像
				json.put("senderPhoto", msg.getSenderPhoto());
				// 消息类型：1血糖，2血压
				json.put("type", msg.getTzType());
				// 是否已读：1未读，0已读
				json.put("read", msg.getRead());
				// 是否已读：
				json.put("sex", msg.getSex());
				// 当前值/收缩压，正数为高，负数为低
				json.put("value1", msg.getValue1());
				// 上次值/舒张压，正数为高，负数为低
				json.put("value2", msg.getValue2());
				// 发送时间
				json.put("czrq", DateUtil.dateToStrLong(msg.getCzrq()));
				array.put(json);
			}
			return write(200, "获取体征消息成功！", "list", array);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取体征消息失败！");
		}
	}

	/**
	 * 更新体征消息为已读
	 * @param msgid
	 * @return
	 */
	@RequestMapping(value = "read_health")
	@ResponseBody
	public String readHealth(long msgid) {
		try {
			messageService.readHealth(msgid);
			return success("操作成功！");
		} catch (Exception e) {
			error(e);
			return error(-1, "操作失败！");
		}
	}


	/**
	 * 根据参数查询发送给我的消息
	 * @return
	 */
	@RequestMapping(value = "find")
	@ResponseBody
	public String find(String sender, String signStatus) {
		try {
			Message msg = messageService.findMessage(sender, getUID(), signStatus);
			JSONObject json = null;
			if (msg != null) {
				json = new JSONObject();
				json.put("id", msg.getId());
				json.put("sender", msg.getSender());
				json.put("senderName", msg.getSenderName());
				json.put("type", msg.getType());
				json.put("read", msg.getRead()); // 是否已读：1未读，0已读
				json.put("signStatus", msg.getSignStatus());
				json.put("status", msg.getOver());
				json.put("reason", msg.getReason());
			}
			return write(200, "获取消息成功！", "data", json);
		} catch (Exception e) {
			error(e);
			return error(-1, "获取消息失败！");
		}
	}

}
