package com.chatroom.emojis;

import java.util.Queue;


import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

/**
 *
 * Emoji显示器:
 * ①为emoji实体集创建emoji图片节点,
 * ②为包含emoji的字符串分离并创建emoji图片节点和文本节点。
 *
 * @Title: EmojiParser.java
 * @Description: TODO
 * @author ZhangJing
 * @date 2017年5月31日 下午3:27:18
 *
 */
public class EmojiDisplayer {
	/**
	 * 将字符串解析分离成emoji图片节点和文本节点
	 * @param input 输入字符串
	 * @return
	 */
	public static Node[] createEmojiAndTextNode(String input) {
		Queue<Object> queue = EmojiHandler.getInstance().toEmojiAndText(input);
		Node[] nodes = new Node[queue.size()];
		int i = 0;
		while (!queue.isEmpty()) {
			Object ob = queue.poll();
			if (ob instanceof String) {
				String text = (String) ob;
				nodes[i++] = createTextNode(text);
			} else if (ob instanceof Emoji) {
				Emoji emoji = (Emoji) ob;
				nodes[i++] = createEmojiNode(emoji, 24, 10);
			}
		}
		return nodes;
	}

	/**
	 * 创建emoji图片节点
	 *
	 * @param emoji
	 *            emoji
	 * @param size
	 *            图片显示大小
	 * @param pad
	 *            图片间距
	 * @param isCursor
	 *            是否需要图片光标及鼠标处理事件
	 * @return
	 */
	public static Node createEmojiNode(Emoji emoji, int size, int pad) {
		// 将表情放到stackpane中
		StackPane stackPane = new StackPane();
		stackPane.setMaxSize(size, size);
		stackPane.setPrefSize(size, size);
		stackPane.setMinSize(size, size);
		stackPane.setPadding(new Insets(pad));
		ImageView imageView = new ImageView();
		imageView.setFitWidth(size);
		imageView.setFitHeight(size);
		imageView.setImage(ImageCache.getInstance().getImage(getEmojiImagePath(emoji.getHex())));
		stackPane.getChildren().add(imageView);

		return stackPane;
	}

	/**
	 * 创建文本节点
	 *
	 * @param text
	 * @return
	 */
	private static Node createTextNode(String text) {
		Text textNode = new Text(text);
		textNode.setFont(Font.font("Arial", 15));// 字体样式和大小
		return textNode;
	}

	/**
	 * 通过emoji的hex得到表情的路径
	 *
	 * @param hexStr
	 * @return
	 */
	private static String getEmojiImagePath(String hexStr) {
		return "emoji/png_40/" + hexStr + ".png";
	}
}