package com.iamberry.wechat.handles.wechat.template;

import java.util.Date;

import com.iamberry.wechat.tools.WeixinUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.iamberry.app.tool.log.RatFWLogger;
import com.iamberry.wechat.core.entity.mq.MQMessage;
import com.iamberry.wechat.handles.mq.MQServiceProxy;
import com.iamberry.wechat.tools.NameUtils;

/**
 * @company	深圳爱贝源科技有限公司
 * @website www.iamberry.com
 * @author 	献
 * @tel		18271840547
 * @date	2016年9月7日
 * @explain 处理微信模板消息的工具类，能够对外发送所有的微信通知
 */
@Component
public class Template {
	
	@Autowired
	private MQServiceProxy mqSerivce;
	
	@Autowired
	private RatFWLogger fwLogger;
	
	/**
	 * 1，收益成功的通知（下线购买的通知）
	 * 2，待入帐收益被退回通过（下线退货通知）
	 * 3，发货的通知（会员发货的通知）
	 * 4、营养自测相关的提醒(稍后)
	 * 5、取消订单前5分钟，理应通知用户去支付未完成订单,调用消息通知
	 * 6、省代、代理、门店 如果产生待入账或待入账因退货被扣回 均要给合作商消息通知
	 */
	
	/**
	 * 异步发送通知接口
	 * @param message		消息内容，json格式
	 * @param openID		接受人openID
	 * @param templateId	模板id
	 * @return
	 */
	public boolean sendTemplateMessage(String message, String openID, String templateId, String redirectURL) {
		
		// 组装数据
		MQMessage mqMessage = new MQMessage();
		mqMessage.setServiceToMessage(openID);			// openid
		mqMessage.setServiceHandlerMethodName("sendMessage");
		mqMessage.setServiceHandlerObjectName("template");
		mqMessage.setServiceIsSend(2);					// 未推送
		mqMessage.setServiceType(5);					// 推送微信信息
		mqMessage.setServiceOtherMessage(templateId + "-" + message + "-" + redirectURL);	// 模板id
		mqMessage.setServiceCreateDate(new Date());
		
		try {
			mqSerivce.insertMQMessage(mqMessage);
		} catch (Exception e) {
			return false;
		}
		return true;
	}
	
	/**
	 * 实际发送消息接口
	 * @param message
	 * @return
	 * @throws Exception
	 */
	public boolean sendMessage(MQMessage message) throws Exception {
		
		String [] datas = StringUtils.split("-", message.getServiceOtherMessage());
		try {
			WeixinUtil.sendTemplateMessage(NameUtils.appId, NameUtils.appSecret, message.getServiceToMessage(), datas[0], datas[1], datas[2]);;
			return true;
		} catch (Exception e) {
			fwLogger.error(this, e.getMessage());
			throw e;
		}
	}
}
