package com.uas.platform.b2b.support;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;
import org.springframework.util.StringUtils;

import com.tencent.xinge.ClickAction;
import com.tencent.xinge.Message;
import com.tencent.xinge.MessageIOS;
import com.tencent.xinge.Style;
import com.tencent.xinge.TimeInterval;
import com.tencent.xinge.XingeApp;
import com.uas.platform.b2b.core.util.ContextUtils;
import com.uas.platform.b2b.dao.UserBaseInfoDao;
import com.uas.platform.b2b.model.User;
import com.uas.platform.b2b.model.UserBaseInfo;
import com.uas.platform.b2b.model.UserInfo;

/**
 * 信鸽推送
 * @author suntg
 * @date 2015年3月7日10:01:04
 *
 */
public class XingePusher {
	
	/**
	 * /**
	 * 向单个帐套的单个账号Android设备推送一条信息<p>在Android客户端使用手机号向信鸽注册</p>
	 * @param account 接受者账号（手机号）
	 * @param tittle 推送消息的标题
	 * @param content 推送消息的内容
	 * @param url 消息指定要打开的页面
	 * @param pageTitle webView标题
	 * @return
	 */
	public static JSONObject pushSingleAccountAndroid(String account, String tittle, String content, String url, String pageTitle) {
		XingeApp xinge = new XingeApp(2100046094, "5805cd8bf93ea5405c98b3a6e81e29b3");
		Message message = new Message();
		message.setExpireTime(86400);
		message.setTitle(tittle);//推送信息标题
		message.setContent(content);//推送信息内容（第二行）
		if( ! StringUtils.isEmpty(url)) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("url", url);
			map.put("title", pageTitle);
			message.setCustom(map);
			ClickAction clickAction = new ClickAction();
			clickAction.setActionType(ClickAction.TYPE_ACTIVITY);
			clickAction.setActivity("com.b2b.activity.WebViewCommActivity");
			message.setAction(clickAction);
		}
		message.setType(Message.TYPE_NOTIFICATION);
		Style style = new Style(0, 1, 1, 1, 0, 1, 0, 0);
		message.setStyle(style);
		JSONObject obj = xinge.pushSingleAccount(0, account, message);//发送给当前的帐套
		return obj;
	};
	
	/**
	 * 向单个帐套的单个账号IOS设备推送一条信息<p>在Android客户端使用(master+emcode)账号向信鸽注册</p>
	 * @param account 接受者账号（UU号）
	 * @param alert 推送消息提示
	 * @param url 推送信息指定打开的页面链接
	 * @return
	 */
	public static JSONObject pushSingleAccountIOS(String account, String alert, String url) {
		XingeApp xinge = new XingeApp(2200121309L, "fd52d406369688c2619b794862ea3f12");
		MessageIOS message = new MessageIOS();
		message.setAlert(alert);
		message.setBadge(1);
		message.setSound("beep.wav");
		if( ! StringUtils.isEmpty(url)) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("url", url);
			map.put("platform", "B2B");
			message.setCustom(map);
		}
		TimeInterval acceptTime1 = new TimeInterval(0,0,23,59);
		message.addAcceptTime(acceptTime1);
		JSONObject obj = xinge.pushSingleAccount(0, account, message, XingeApp.IOSENV_DEV);
		return obj;
	}
	
	/**
	 * 向指定账号同时发送Android和IOS的消息推送
	 * @param account 接收者账号（手机号）
	 * @param tittle 消息标题
	 * @param content 消息内容
	 * @param url 消息要打开的链接页面
	 * @param pageTitle webView标题
	 * @return [推送Android的结果, 推送IOS的结果]
	 */
	public static JSONObject[] pushByAccount(String account, String tittle, String content, String url, String pageTitle) {
		if(StringUtils.hasText(account)) {
			JSONObject[] result = new JSONObject[2];
			String tel = account;
			result[0] = pushSingleAccountAndroid(tel, tittle, content, url, pageTitle);
			result[1] = pushSingleAccountIOS(tel, tittle + " " + content, url);
			return result;
		} else {
			return new JSONObject[2];
		}
	}
	
	/**
	 * 向指定用户同时发送Android和IOS的消息推送
	 * @param account 接收者账号（手机号）
	 * @param tittle 消息标题
	 * @param content 消息内容
	 * @param url 消息要打开的链接页面
	 * @param pageTitle webView标题
	 * @return [推送Android的结果, 推送IOS的结果]
	 */
	public static JSONObject[] pushByUser(User user, String tittle, String content, String url, String pageTitle) {
		if(user != null) {
			return pushByAccount(user.getUserTel(), tittle, content, url, pageTitle);
		} else {
			return new JSONObject[2];
		}
	}
	
	/**
	 * 向指定用户同时发送Android和IOS的消息推送
	 * @param account 接收者账号（手机号）
	 * @param tittle 消息标题
	 * @param content 消息内容
	 * @param url 消息要打开的链接页面
	 * @param pageTitle webView标题
	 * @return [推送Android的结果, 推送IOS的结果]
	 */
	public static JSONObject[] pushByUser(UserInfo user, String tittle, String content, String url, String pageTitle) {
		if(user != null) {
			return pushByAccount(user.getUserTel(), tittle, content, url, pageTitle);
		} else {
			return new JSONObject[2];
		}
	}
	
	/**
	 * 向指定用户同时发送Android和IOS的消息推送
	 * @param account 接收者账号（手机号）
	 * @param tittle 消息标题
	 * @param content 消息内容
	 * @param url 消息要打开的链接页面
	 * @param pageTitle webView标题
	 * @return [推送Android的结果, 推送IOS的结果]
	 */
	public static JSONObject[] pushByUser(UserBaseInfo user, String tittle, String content, String url, String pageTitle) {
		if(user != null) {
			return pushByAccount(user.getUserTel(), tittle, content, url, pageTitle);
		} else {
			return new JSONObject[2];
		}
	}
	
	/**
	 * 向指定用户UU号同时发送Android和IOS的消息推送
	 * @param account 接收者账号（手机号）
	 * @param tittle 消息标题
	 * @param content 消息内容
	 * @param url 消息要打开的链接页面
	 * @param pageTitle webView标题
	 * @return [推送Android的结果, 推送IOS的结果]
	 */
	public static JSONObject[] pushByUserUU(Long userUU, String tittle, String content, String url, String pageTitle) {
		if(userUU != null) {
			UserBaseInfoDao userRepository = ContextUtils.getBean(UserBaseInfoDao.class);
			UserBaseInfo user = userRepository.findOne(userUU);
			return pushByUser(user, tittle, content, url, pageTitle);
		} else {
			return new JSONObject[2];
		}
	}


}
