package com.ym.mec.web.controller.education;

import com.ym.mec.auth.api.client.SysUserFeignService;
import com.ym.mec.auth.api.entity.SysUser;
import com.ym.mec.biz.dal.enums.MessageSendMode;
import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
import com.ym.mec.biz.service.SysMessageService;
import com.ym.mec.common.controller.BaseController;
import com.ym.mec.common.exception.BizException;
import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
import com.ym.mec.util.validator.CommonValidator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;

@RestController
@Api(tags = "消息服务")
@RequestMapping("sysEduMessage")
public class SysEduMessageController extends BaseController {

	@Autowired
	private SysMessageService sysMessageService;

	@Autowired
	private SysUserFeignService sysUserFeignService;

	@ApiOperation("获取所有消息列表")
	@GetMapping(value = "list")
	public Object list(SysMessageQueryInfo queryInfo){
		SysUser sysUser = sysUserFeignService.queryUserInfo();
		if (sysUser == null) {
			return failed(HttpStatus.FORBIDDEN, "请登录");
		}
		queryInfo.setUserId(sysUser.getId());
		queryInfo.setType(3);
		queryInfo.setJpushType("SYSTEM");
		return succeed(sysMessageService.queryPage(queryInfo));
	}

	@ApiOperation("一键已读")
	@PostMapping("batchSetRead")
	public Object batchSetRead() {
		int status = 1;
		SysUser sysUser = sysUserFeignService.queryUserInfo();
		if (sysUser == null) {
			return failed(HttpStatus.FORBIDDEN, "请登录");
		}
		return sysMessageService.updateStatus(sysUser.getId(), status,"SYSTEM") > 0 ? succeed() : failed();
	}

	@ApiOperation("设置已读")
	@PostMapping("setRead")
	public Object setRead(Long id) {
		int status = 1;
		SysUser sysUser = sysUserFeignService.queryUserInfo();
		if (sysUser == null) {
			return failed(HttpStatus.FORBIDDEN, "请登录");
		}
		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
	}

	@ApiOperation(value = "查询用户未读消息条数")
	@GetMapping("/queryCountOfUnread")
	public Object queryCountOfUnread() {
		SysUser sysUser = sysUserFeignService.queryUserInfo();
		if (sysUser == null) {
			return failed("请重新登录");
		}
		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"SYSTEM");

		if (map == null || map.size() == 0) {
			return succeed();
		}
		return succeed(map);
	}

	@ApiOperation(value = "发送消息")
	@PostMapping("/sendMessage")
	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
		SysUser sysUser = sysUserFeignService.queryUserInfo();
		if (sysUser == null) {
			return failed(HttpStatus.FORBIDDEN, "请登录");
		}
		Integer userId = sysUser.getId();

		String mobileNo = sysUser.getPhone();
		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
			throw new BizException("请输入正确的手机号");
		}
		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,"SYSTEM");
		return succeed();
	}
}
