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

import java.sql.Time;
import java.util.Date;

import com.yihu.wlyy.aop.ObserverRequired;
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.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yihu.wlyy.entity.consult.ConsultMoVi;
import com.yihu.wlyy.entity.consult.ConsultMoViReferral;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.service.app.consult.ConsultMoviService;
import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.web.BaseController;

/**
 * 电话视频咨询的Controller.
 * 
 * @author George
 */
@Controller
@RequestMapping(value = "/doctor/consult", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "电话咨询")
public class DoctorConsultMoviController extends BaseController {

	@Autowired
	private ConsultMoviService consultMoviService;
	@Autowired
	private DoctorService doctorService;

	/**
	 * 电话视频咨询列表查询
	 * @param type 1、电话预约，2、视频预约，3电话咨询记录，4视频咨询记录
	 * @param pagesize 每页显示数，默认为10
	 * @return
	 */
	@RequestMapping(value = "movi_list")
	@ResponseBody
	public String list(int type, String appoDate, int pagesize) {
		try {
			Page<ConsultMoVi> list = consultMoviService.findByDoctor(getUID(), type, DateUtil.strToDateLong(appoDate), pagesize);
			if (list != null) {
				JSONArray jsonArray = new JSONArray();
				for (ConsultMoVi consult : list) {
					if (consult == null) {
						continue;
					}
					JSONObject json = new JSONObject();
					json.put("id", consult.getId());
					// 设置咨询标识
					json.put("code", consult.getConsult());
					// 设置患者标识
					json.put("patient", consult.getPatient());
					// 设置患者姓名
					json.put("name", consult.getName());
					// 患者性别
					json.put("sex", consult.getSex());
					// 患者年龄
					json.put("age", DateUtil.getAgeByBirthday(consult.getBirthday()));
					// 设置预约备注
					json.put("content", consult.getContent());
					// 设置预约日期
					json.put("appo_date", DateUtil.dateToStrLong(consult.getAppoDate()));
					// 设置预约星期
					json.put("appo_week", consult.getAppoWeek());
					// 设置预约时间段
					json.put("hour_begin", DateUtil.dateToStr(consult.getHourBegin(), DateUtil.HH_MM));
					json.put("hour_end", DateUtil.dateToStr(consult.getHourEnd(), DateUtil.HH_MM));
					// 设置头像
					json.put("photo", consult.getPhoto());
					// 设置状态
					json.put("status", consult.getStatus());
					if (consult.getComment() != null) {
						// 设置评价内容
						json.put("comment", consult.getComment().getContent());
						// 设置星级
						json.put("star", consult.getComment().getStar());
					}
					jsonArray.put(json);
				}
				return write(200, "查询成功", list.isFirst(), list.isLast(), list.getTotalElements(), list.getTotalPages(), "list", jsonArray);
			} else {
				return success("查询成功");
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "查询失败！");
		}
	}

	/**
	 * 根据code查询电话和视频详情
	 * @param consult 咨询标识
	 * @return
	 */
	@RequestMapping(value = "movi_info")
	@ResponseBody
	public String info(String code) {
		try {
			ConsultMoVi consult = consultMoviService.findByCode(code);
			if (consult != null) {
				JSONObject json = new JSONObject();
				// 设置咨询标识
				json.put("code", consult.getConsult());
				// 设置患者标识
				json.put("patient", consult.getPatient());
				// 设置患者姓名
				json.put("name", consult.getName());
				// 患者性别
				json.put("sex", consult.getSex());
				// 患者年龄
				json.put("age", DateUtil.getAgeByBirthday(consult.getBirthday()));
				// 设置头像
				json.put("photo", consult.getPhoto());
				// 设置预约日期
				json.put("appo_date", DateUtil.dateToStr(consult.getAppoDate(), DateUtil.YYYY_MM_DD));
				// 设置预约星期
				json.put("appo_week", consult.getAppoWeek());
				// 设置预约时间段
				json.put("hour_begin", DateUtil.dateToStr(consult.getHourBegin(), DateUtil.HH_MM));
				json.put("hour_end", DateUtil.dateToStr(consult.getHourEnd(), DateUtil.HH_MM));
				// 设置预约备注
				json.put("content", consult.getContent());
				// 设置状态
				json.put("status", consult.getStatus());
				return write(200, "查询成功", "data", json);
			} else {
				return success("查询失败");
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "查询失败！");
		}
	}

	/**
	 * 结束视频咨询
	 * @param consult 咨询标识
	 * @return
	 */
	@RequestMapping(value = "movi_finish")
	@ResponseBody
	@ObserverRequired
	public String finish(String code) {
		try {
			int row = consultMoviService.finish(code);
			if (row > 0) {
				return success("操作成功");
			} else {
				return error(-1, "操作失败！");
			}
		} catch (Exception e) {
			error(e);
			return error(-1, "操作失败！");
		}
	}

	/**
	 * 查询三师团队的其他医生
	 * @param consult 患者标识
	 * @return
	 */
//	@RequestMapping(value = "referral_doc")
//	@ResponseBody
//	public String referralDoc(String consult) {
//		try {
//			ConsultMoVi cm = consultMoviService.findByCode(consult);
//			JSONArray array = new JSONArray();
//			// 查询对应的团队成员
//			Iterable<DoctorTeamInfo> iterable = consultMoviService.findMoviTransferByTeam(cm.getTeam(), consult);
//			if (iterable != null) {
//				Iterator<DoctorTeamInfo> it = iterable.iterator();
//				while (it != null && it.hasNext()) {
//					DoctorTeamInfo dti = it.next();
//					if (dti == null) {
//						continue;
//					}
//					JSONObject temp = new JSONObject();
//					temp.put("doctor", dti.getDoctor());
//					temp.put("name", dti.getName());
//					array.put(temp);
//				}
//			}
//			return write(200, "查询成功", "list", array);
//		} catch (Exception e) {
//			error(e);
//			return invalidUserException(e, -1, "查询失败！");
//		}
//	}

	/**
	 * 视频转诊
	 * @param doctor 转接医生标识
	 * @param consult 视频咨询标识
	 * @param scheduling 排班标识
	 * @param appo_date 预约日期
	 * @param appo_week 预约星期
	 * @param hour_begin 预约开始时间
	 * @param hour_end 预约结束时间
	 * @param content 转诊说明
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "referral")
	@ObserverRequired
	public String referral(String doctor, String consult, String scheduling, String appo_date, int appo_week, String hour_begin, String hour_end, String content) {
		try {
			// 查询医生信息
			Doctor d = doctorService.findDoctorByCode(getUID());
			// 查询视频咨询信息
			ConsultMoVi cm = consultMoviService.findByCode(consult);
			// 设置排班标识
			cm.setScheduling(scheduling);
			// 设置预约日期
			cm.setAppoDate(DateUtil.strToDateAppendNowTime(appo_date, DateUtil.YYYY_MM_DD_HH_MM_SS));
			// 设置预约星期
			cm.setAppoWeek(appo_week);
			// 设置预约时段
			cm.setHourBegin(Time.valueOf(hour_begin));
			cm.setHourEnd(Time.valueOf(hour_end));
			// 更新老的转诊记录
			ConsultMoViReferral oldCmr = consultMoviService.findReferralByConsult(getUID(), consult);
			// 设置为已转诊
			oldCmr.setFlag(1);
			// 新的转诊记录
			ConsultMoViReferral cmr = new ConsultMoViReferral();
			cmr.setCzrq(new Date());
			cmr.setFlag(0);
			// 设置转出医生标识
			cmr.setFrom(d.getCode());
			// 设置转出医生姓名
			cmr.setFromName(d.getName());
			cmr.setTo(doctor);
			// 设置排班标识
			cmr.setScheduling(scheduling);
			// 设置预约日期
			cmr.setAppoDate(DateUtil.strToDate(appo_date, DateUtil.YYYY_MM_DD));
			// 设置预约星期
			cmr.setAppoWeek(appo_week);
			// 设置预约时段
			cmr.setHourBegin(Time.valueOf(hour_begin));
			cmr.setHourEnd(Time.valueOf(hour_end));
			cmr.setContent(content);
			consultMoviService.transfer(cm, cmr, oldCmr);
			return success("转诊成功！");
		} catch (Exception e) {
			error(e);
			return error(-1, "转诊失败！");
		}
	}

	/**
	 * 添加检查检验接口
	 * @param patient 患者标识
	 * @param items 检查检验项
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "inspect")
	@ObserverRequired
	public String addInspect(String patient, String items) {
		try {
			return success("保存成功！");
		} catch (Exception e) {
			error(e);
			return error(-1, "保存失败！");
		}
	}

}
