package chat.handler.data;

import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import chat.user.User;
import chat.user.UserStore;
import cn.wildfirechat.proto.WFCMessage;
import cn.wildfirechat.proto.WFCMessage.Message;
import cn.wildfirechat.proto.WFCMessage.UserResult;

public class DataList {

	private static List<FriendData> friendList;
	private static List<WFCMessage.Message> messageList;
	private static Map<String, WFCMessage.UserResult> userMap;
	private static WFCMessage.UserResult currentUserInfo;
	public static long timestamp;
	
	static {
		timestamp = System.currentTimeMillis();
		
		//1. friend list
		friendList = new ArrayList<FriendData>();
		
//		friendList.add(new FriendData("user000", "user001", "朋友1别名", null, 0, 0, timestamp));
//		friendList.add(new FriendData("user000", "user002", "朋友2别名", null, 0, 0, timestamp));
//		friendList.add(new FriendData("user000", "user003", "朋友3别名", null, 0, 0, timestamp));
//		friendList.add(new FriendData("user000", "user004", "朋友4别名", null, 0, 0, timestamp));
		
		//2. message list
		messageList = new ArrayList<WFCMessage.Message>();
		
		WFCMessage.Message message0 = createOneMessage(202101109876543201L, "user001");
		messageList.add(message0);
		
//		WFCMessage.Message message1 = createOneMessage(202101109876543202L, "user001");
//		messageList.add(message1);
		
		WFCMessage.Message message2 = createOneMessage(202101109876543203L, "user002");
		messageList.add(message2);
		
		WFCMessage.Message message3 = createOneMessage(202101109876543204L, "user003");
		messageList.add(message3);
		
		WFCMessage.Message message4 = createOneMessage(202101109876543204L, "user004");
		messageList.add(message4);
		
		//3. user list
		userMap = new HashMap<String, WFCMessage.UserResult>();
//		currentUserInfo = createUserInfo("user000", "user000", "usera000", "http://cdn2.wildfirechat.cn/robot.png", "13636388405");
//		WFCMessage.UserResult user1 = createUserInfo("user001", "user001", "usera001", "http://cdn2.wildfirechat.cn/robot.png", "13600000001");
//		WFCMessage.UserResult user2 = createUserInfo("user002", "user002", "usera002", "http://cdn2.wildfirechat.cn/robot.png", "13600000002");
//		WFCMessage.UserResult user3 = createUserInfo("user003", "user003", "usera003", "http://cdn2.wildfirechat.cn/robot.png", "13600000003");
//		WFCMessage.UserResult user4 = createUserInfo("user004", "user004", "user004", "http://cdn2.wildfirechat.cn/robot.png", "13600000004");
		
//		userMap.put("user000", currentUserInfo);
//		userMap.put("user001", user1);
//		userMap.put("user002", user2);
//		userMap.put("user003", user3);
//		userMap.put("user004", user4);
	}
	
	public static List<FriendData> getFriendList() {
		return friendList;
	}

	public static List<WFCMessage.Message> getMessageList() {
		return messageList;
	}
	
	public static WFCMessage.UserResult getUserInfo() {
		return currentUserInfo;
	}
	
	private static Message createOneMessage(long messageId, String userId) {
		WFCMessage.Message message = null;
		
		try {
			WFCMessage.Message.Builder builder = WFCMessage.Message.newBuilder();
			
			builder.setMessageId(messageId);
			builder.setFromUser(userId);
			
	        WFCMessage.Conversation.Builder cb = WFCMessage.Conversation.newBuilder();
	        cb.setType(0);
	        //cb.setTarget("user000");
	        cb.setTarget("user000");
	        cb.setLine(0);
	        builder.setConversation(cb.build());
	        
	        WFCMessage.MessageContent.Builder contentBuilder = WFCMessage.MessageContent.newBuilder();
	        contentBuilder.setType(1);
	        String str = "this is " + userId + "say 测试: Hello!!!";
	        byte[] bytes = str.getBytes();
	        bytes = Base64.getEncoder().encode(bytes);
	        //ByteString byteString = ByteString.copyFromUtf8(str);
	        //contentBuilder.setSearchableContentBytes(byteString);
	        contentBuilder.setSearchableContent(str);
	        contentBuilder.setMediaType(0);
	        contentBuilder.setPersistFlag(0);
	        contentBuilder.setExpireDuration(0);
	        contentBuilder.setMentionedType(0);
	        WFCMessage.MessageContent messageContent = contentBuilder.build();
	        builder.setContent(messageContent);
	        
	        builder.setServerTimestamp(timestamp);
			
			message = builder.build();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
		return message;
	}
	
	private static UserResult createUserInfo(String userId, String name, String displayName, String portrait, String mobile) {
		//1. create user
		User user = new User(userId);
		user.setName(name);
		user.setDisplayName(displayName);
		user.setPortrait(portrait);
		user.setMobile(mobile);
		
		//2. add to store
		UserStore.addOne(user);

		//3. to user result
        WFCMessage.UserResult userResult = user.toWFCUserResult();
        
        return userResult;
	}

	public static UserResult getUser(String uid) {
		WFCMessage.UserResult user = userMap.get(uid);
		return user;
	}

}