package cn.timer.api.controller.htzz.atttimer;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import cn.timer.api.bean.admin.AdminAssoTxjlb;
import cn.timer.api.bean.admin.AdminMsgTemplate;
import cn.timer.api.bean.htzz.HtzzAdminZzda;
import cn.timer.api.config.enums.PinType;
import cn.timer.api.controller.kqgl.ClockInTool;

@Transactional
@Component
public class AlicloudSMS {
	
	@Value("${config-8timer.Aliyun.PROJECT_NAME}")
	public String PROJECT_NAME;

	@Value("${config-8timer.Aliyun.REGION_ID}")
	public String REGION_ID;

	@Value("${config-8timer.Aliyun.ACCESSKEY_ID}")
	public String ACCESSKEY_ID;

	@Value("${config-8timer.Aliyun.SECRET}")
	public String SECRET;
	
	final static String CODE_NAME = "TemplateCode";// 短信模板代码参数名
	final static String TEMPLATE_PARAM = "TemplateParam";// 自定义参数
	final static String DOMAIN = "dysmsapi.aliyuncs.com";
	final static String VERSION = "2017-05-25";
	final static String ACTION_SEND = "SendSms"; // 发短信
	final static String ACTION_QUERY = "QuerySendDetails"; // 短信查询
	final static String PAGE_SIZE = "1";
	final static String CURRENT_PAGE = "1";
	
	/**
	 * 提醒功能
	 */
	@SuppressWarnings("deprecation")
	public List<Object> remind(HtzzAdminZzda zzda, String phone,String tzname,Integer tzrid) {
		
		//短信模板详情
		AdminMsgTemplate dxmb = AdminMsgTemplate.builder().id(zzda.getTemplateId()).build().selectById();
		String str = dxmb.getContent();
		String code = dxmb.getPlatformNum();
		
		DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESSKEY_ID, SECRET);
		IAcsClient client = new DefaultAcsClient(profile);

		CommonRequest request = new CommonRequest();
		request.setMethod(MethodType.POST);
		request.setDomain(DOMAIN);
		request.setVersion(VERSION);
		request.setAction(ACTION_SEND);
		request.putQueryParameter("RegionId", REGION_ID);
		request.putQueryParameter("PhoneNumbers", phone);
		request.putQueryParameter("SignName", PROJECT_NAME);
		request.putQueryParameter(CODE_NAME, code);//模版CODE

		ArrayList<String> word = new ArrayList<String>();
		int m = 0, n = 0;
		int count = 0;
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) == '{') {
				if (count == 0) {
					m = i;	
				}
				count++;
			}
			if (str.charAt(i) == '}') {
				count--;
				if (count == 0) {
					n = i;
					word.add(str.substring(m, n + 1).replace("{","").replace("}",""));
				}
			}
		}
		JsonArray array=new JsonArray();
		JsonObject lan=new JsonObject();
		for (String bl : word) {
			if(bl.equals("name")) {
				lan.addProperty(bl, tzname);
			}else if(bl.equals("yxdqr")){
				lan.addProperty(bl, ClockInTool.SunNovCSTYMD(zzda.getYxdqr()));
			}else {
				String strjson = JSON.toJSONString(zzda);
				JSONObject jsonObject = JSONObject.parseObject(strjson);
				String value = jsonObject.getString(bl);
				lan.addProperty(bl, value);
			}
		}
		array.add(lan);
		
		String SMSformat = String.valueOf(array).replace("[","").replace("]","");
		
//		System.out.println(SMSformat);
		//短信模板格式
		request.putQueryParameter(TEMPLATE_PARAM,SMSformat);
		
		CommonResponse response = null;
		String a = null;
		try {
			response = client.getCommonResponse(request);
			a = response.getData();
//			System.err.println("response:"+a); // 短信服务响应内容
		} catch (ServerException e) {
			e.printStackTrace();
		} catch (ClientException e) {
			e.printStackTrace();
		}
		Integer id = null;
		if (a != null && a.contains("OK")) {
			
			AdminAssoTxjlb txs = AdminAssoTxjlb.builder().build();
			
	        JSONObject  jsonObject = JSONObject.parseObject(SMSformat);
	        Map<String, Object> jsonToMap =  JSONObject.parseObject(jsonObject.toJSONString()); 
	        for(Entry<String, Object> entry : jsonToMap.entrySet()){
	            String mapKey = entry.getKey();
	            String mapValue = String.valueOf(entry.getValue());
	            str = str.replace("${"+mapKey+"}", mapValue);
	        }
//	        System.out.println(str);
			txs.setContent(str);//内容
			txs.setUserName(tzname);
			txs.setEmpNum(tzrid);
			txs.setTxType(zzda.getDocumentType());
			txs.setOrgCode(zzda.getOrgCode());
			txs.setAddtime(new Date().getTime());
			txs.setTxstate(0);
			txs.insert();
			
			List<Object> list = new ArrayList<Object>();

			list.add(id);
			list.add(JSONObject.parseObject(response.getData()));
			return list;// 代表请求成功
		}

		return null;
	}
}