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

import java.util.Date;

import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.service.app.account.DoctorInfoService;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
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.ConsultPublic;
import com.yihu.wlyy.entity.consult.ConsultPublicReply;
import com.yihu.wlyy.service.app.consult.ConsultPublicService;
import com.yihu.wlyy.task.PushMsgTask;
import com.yihu.wlyy.util.CommonUtil;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.MessageType;
import com.yihu.wlyy.web.BaseController;

/**
 * 医生端：公共咨询控制类
 * @author George
 *
 */
@Controller
@RequestMapping(value = "/doctor/consult/public")
@Api(description = "公共咨询")
public class DoctorConsultPublicController extends BaseController {

	@Autowired
	private ConsultPublicService consultPublicService;

	@Autowired
	private DoctorInfoService doctorInfoService;
	/**
	 * 查询公共咨询记录
	 * @param type 查询类型：0全部，1我的回答
	 * @param pagesize 分页大小
	 * @param disease 疾病类型标识
	 * @return
	 */
	@RequestMapping(value = "list")
	@ResponseBody
	public String list(@RequestParam(required = false) String disease, int type, long id, int pagesize) {
		try {
			JSONArray list = new JSONArray();
			Page<ConsultPublic> datas = consultPublicService.findPublicQuestionByDoctor(getUID(), disease, type, id, pagesize);
			if (datas != null) {
				for (ConsultPublic cp : datas) {
					if (cp == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("id", cp.getId());
					// 设置问题标识
					json.put("consult", cp.getConsult());
					// 设置患者姓名
					json.put("name", cp.getName());
					// 设置患者头像
					json.put("photo", cp.getPhoto());
					// 设置问题标题
					json.put("title", cp.getTitle());
					// 设置问题描述
					json.put("content", cp.getContent());
					// 设置发病时间
					json.put("when", cp.getWhen());
					// 设置疾病标识
					json.put("disease", cp.getDisease());
					// 设置疾病名称
					json.put("diseaseName", cp.getDiseaseName());
					// 设置是否包含图片
					json.put("hasImg", StringUtils.isNoneEmpty(cp.getImages()));
					// 设置回复总数
					json.put("amount", cp.getAmount());
					list.put(json);
				}
			}
			return write(200, "查询成功！", "list", list);
		} catch (Exception e) {
			error(e);
			return error(-1, "查询失败！");
		}
	}

	/**
	 * 查询咨询详细信息
	 * @param consult
	 * @return
	 */
	@RequestMapping(value = "info")
	@ResponseBody
	public String info(String consult) {
		try {
			JSONObject json = new JSONObject();
			ConsultPublic cp = consultPublicService.findByConsult(consult);
			if (cp != null) {
				// 设置咨询标识
				json.put("consult", cp.getConsult());
				// 设置姓名
				json.put("name", cp.getName());
				// 设置头像
				json.put("photo", cp.getPhoto());
				// 设置问题
				json.put("question", cp.getTitle());
				// 设置问题描述
				json.put("content", cp.getContent());
				// 设置发病时间
				json.put("when", cp.getWhen());
				// 设置回复图片
				json.put("images", cp.getImages());
				// 设置疾病标识
				json.put("disease", cp.getDisease());
				// 设置疾病名称
				json.put("diseaseName", cp.getDiseaseName());
				// 设置回复时间
				json.put("czrq", DateUtil.dateToStrLong(cp.getCzrq()));
			}
			return write(200, "查询成功！", "data", json);
		} catch (Exception e) {
			error(e);
			return error(-1, "查询失败！");
		}
	}

	/**
	 * 查询回复列表
	 * @param consult 咨询标识
	 * @param pagesize 分页大小
	 * @return
	 */
	@RequestMapping(value = "reply_list")
	@ResponseBody
	public String replyList(String consult, long id, int pagesize) {
		try {
			JSONArray list = new JSONArray();
			Page<ConsultPublicReply> datas = consultPublicService.findReplyListByConsult(consult, id, pagesize);
			if (datas != null) {
				for (ConsultPublicReply cpr : datas) {
					if (cpr == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					// 设置回复标识
					json.put("id", cpr.getId());
					// 设置患者标识
					json.put("patient", cpr.getPatient());
					// 设置医生标识
					json.put("doctor", cpr.getDoctor());
					// 设置回复者姓名
					json.put("name", cpr.getName());
					// 设置回复者性别
					json.put("sex", cpr.getSex());
					// 设置回复者头像
					json.put("photo", cpr.getPhoto());
					// 设置回复内容
					json.put("content", cpr.getContent());
					String[] images = null;
					if (StringUtils.isNotEmpty(cpr.getImages())) {
						images = cpr.getImages().split(",");
					}
					// 设置回复图片
					json.put("images", images);
					// 设置回复时间
					json.put("czrq", DateUtil.dateToStrLong(cpr.getCzrq()));
					list.put(json);
				}
			}
			return write(200, "查询成功！", "list", datas, list);
		} catch (Exception e) {
			error(e);
			return error(-1, "查询失败！");
		}
	}

	/**
	 * 回复公共咨询
	 * @param consult 咨询标识
	 * @param content 回复内容
	 * @param images 图片标识，多图以逗号分隔
	 * @param images 图片URL，多图以逗号分隔
	 * @return
	 */
	@RequestMapping(value = "reply")
	@ResponseBody
	public String reply(String consult, String content, @RequestParam(required = false) String images) {
		try {
			ConsultPublic cp = consultPublicService.findByConsult(consult);
			if (cp == null) {
				return error(-1, "问题不存在或已删除！");
			} else if (!StringUtils.equals(cp.getDel(), "1")) {
				return error(-1, "问题已删除！");
			}
			ConsultPublicReply reply = new ConsultPublicReply();
			// 设置回复的咨询标识
			reply.setConsult(consult);
			// 设置回复内容
			reply.setContent(content);
			// 设置回复时间
			reply.setCzrq(new Date());
			reply.setDel("1");
			// 设置回复医生标识
			reply.setDoctor(getUID());
			Doctor doctor=doctorInfoService.findDoctorByCode(getUID());

			reply.setSex(doctor.getSex());

			// 设置回复图片URL
			if (StringUtils.isNotEmpty(images)) {
				images = CommonUtil.copyTempImage(images);
			}
			reply.setImages(images);
			if (consultPublicService.addDoctorReply(reply) != null) {
				// 推送消息给患者
				PushMsgTask.getInstance().put(cp.getPatient(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_PUBLIC_REPLY.P_CP_01.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_PUBLIC_REPLY.公共咨询.name(), MessageType.MESSAGE_TYPE_PATIENT_CONSULT_PUBLIC_REPLY.医生回复了您.name(), consult);
				return success("回复成功！");
			} else {
				return error(-1, "回复失败！");
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "回复失败！");
		}
	}

}
