package com.beecode.inz.message;

import java.util.UUID;

import org.json.JSONObject;

import com.beecode.bcp.type.KObject;
import com.beecode.inz.message.enumeration.MessageSourceType;
import com.beecode.inz.message.enumeration.MessageType;
import com.beecode.inz.message.util.MessageUtils;
import com.beecode.inz.message.web.info.ReferenceInfo;
import com.google.gson.JsonObject;

public class MessageToUser {  
	
	public MessageToUser() {
		this.setMsgId(UUID.randomUUID().toString());
	}

	public MessageToUser(KObject object) {
		this.setMsgId(UUID.randomUUID().toString());
		this.sender = new ReferenceInfo(object, MessageInfoConstants.SENDER);
	}
	
	public MessageToUser(ReferenceInfo sender, String content, String data, String lookName, String lookType, String partId,Boolean isToCustomer, MessageSourceType sourceType,String type,String title){
		this.sender = sender;
		this.setMsgId(UUID.randomUUID().toString());
		JsonObject json = new JsonObject();
		json.addProperty(MessageInfoConstants.TITLE, title);
		json.addProperty(MessageInfoConstants.CONTENT, content);
		json.addProperty(MessageInfoConstants.DATA, data);
		json.addProperty(MessageInfoConstants.LOOK_NAME, lookName);
		json.addProperty(MessageInfoConstants.LOOK_TYPE, lookType);
		String jsonContent = json.toString();
		this.content = jsonContent;
		this.partId = partId;
		String tenantId = MessageUtils.getTenantId();
		if(tenantId == null || "".equals(tenantId)){
			tenantId = "__default__tenant__";
		}
		this.tenantId = tenantId;
		this.sourceType = sourceType;
		this.isToCustomer = isToCustomer;
		this.type = type;
	}
	public MessageToUser(KObject object, String content, String data, String lookName, String lookType, String partId,Boolean isToCustomer, MessageSourceType sourceType){
		
		this.sender = new ReferenceInfo(object, MessageInfoConstants.SENDER);
		this.setMsgId(UUID.randomUUID().toString());
		JsonObject json = new JsonObject();
		json.addProperty(MessageInfoConstants.CONTENT, content);
		json.addProperty(MessageInfoConstants.DATA, data);
		json.addProperty(MessageInfoConstants.LOOK_NAME, lookName);
		json.addProperty(MessageInfoConstants.LOOK_TYPE, lookType);
		String jsonContent = json.toString();
		this.content = jsonContent;
		this.partId = partId;
		
		String tenantId = MessageUtils.getTenantId();
		if(tenantId == null || "".equals(tenantId)){
			tenantId = "__default__tenant__";
//			throw new JSONException("tenantId shouldn't be null");
		}
		this.tenantId = tenantId;
		this.sourceType = sourceType;
		this.isToCustomer = isToCustomer;
		this.type = MessageType.REMIND.getMessageType();
		
	}

	public MessageToUser(KObject object, String content, String data, String lookName, String lookType, String partId, MessageSourceType sourceType){
		this.sender = new ReferenceInfo(object, MessageInfoConstants.SENDER);
		this.setMsgId(UUID.randomUUID().toString());
		JsonObject json = new JsonObject();
		json.addProperty(MessageInfoConstants.CONTENT, content);
		json.addProperty(MessageInfoConstants.DATA, data);
		json.addProperty(MessageInfoConstants.LOOK_NAME, lookName);
		json.addProperty(MessageInfoConstants.LOOK_TYPE, lookType);
		String jsonContent = json.toString();
		this.content = jsonContent;
		this.partId = partId;
		
		String tenantId = MessageUtils.getTenantId();
		if(tenantId == null || "".equals(tenantId)){
			tenantId = "__default__tenant__";
//			throw new JSONException("tenantId shouldn't be null");
		}
		this.tenantId = tenantId;
		this.sourceType = sourceType;
		this.type = MessageType.REMIND.getMessageType();
		
	}
	//消息id
    private String msgId;

	//消息内容  
    private String content;
    
    //消息类型  
    private String type; 
    
    //創建者名稱
    private ReferenceInfo sender;
    
    //来源类型
    private MessageSourceType sourceType;
    
    //接收用户id  
    private String partId;
    
    //租户id
    private String tenantId;
    
    //是否是到C端客户
    private Boolean isToCustomer;
    
	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getPartId() {
		return partId;
	}

	public void setPartId(String partId) {
		this.partId = partId;
	}
    
    public String getMsgId() {
		return msgId;
	}

	public void setMsgId(String msgId) {
		this.msgId = msgId;
	}

	public String getTenantId() {
		return tenantId;
	}

	public void setTenantId(String tenantId) {
		this.tenantId = tenantId;
	}

	public ReferenceInfo getSender() {
		return sender;
	}

	public void setSender(ReferenceInfo sender) {
		this.sender = sender;
	}

	public MessageSourceType getSourceType() {
		return sourceType;
	}

	public void setSourceType(MessageSourceType sourceType) {
		this.sourceType = sourceType;
	}

	public Boolean getIsToCustomer() {
		return isToCustomer;
	}

	public void setIsToCustomer(Boolean isToCustomer) {
		this.isToCustomer = isToCustomer;
	}

	/**
	 * json格式序列化
	 */
	public JSONObject toJsonString(){
		JSONObject job = new JSONObject();
		job.put("msgId", this.getMsgId());
		job.put(MessageInfoConstants.PART_ID, this.getPartId());
		job.put(MessageInfoConstants.CONTENT, this.getContent());
		job.put(MessageInfoConstants.TYPE, this.getType());
		job.put(MessageInfoConstants.SENDER, this.getSender() != null? this.getSender().getName() : "");
		job.put(MessageInfoConstants.SOURCE_TYPE, this.getSourceType().name());
		job.put(MessageInfoConstants.TENANT_ID, this.getTenantId());
		job.put(MessageInfoConstants.IS_C, this.getIsToCustomer());
		return job;
	}
}