package com.stay4it.emoji;

import java.util.ArrayList;

import com.stay4it.emoji.ChatActivity.ChatAdapter;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Html.ImageGetter;
import android.text.style.ImageSpan;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

/**
 * @author Stay
 * @version create time:May 24, 2015 10:02:04 PM
 */
public class ChatActivity extends Activity implements com.stay4it.emoji.EmoticonView.OnEmoticonTapListener, OnClickListener {
	private EmoticonView mEmoView;
	private EditText mChatEditorTxt;
	private ListView mChatLsv;
	private ChatAdapter adapter;
	private ArrayList<String> messages = new ArrayList<String>();
	private Button mChatSendBtn;;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.chat);
		EmojiParser.getInstance(this);
		mChatLsv = (ListView) this.findViewById(R.id.mChatLsv);
		adapter = new ChatAdapter();
		mChatLsv.setAdapter(adapter);
		mEmoView = (EmoticonView) this.findViewById(R.id.message_layout_emotes);
		mEmoView.init(this, this, getResources());
		mChatEditorTxt = (EditText) this.findViewById(R.id.mChatEditorTxt);
		mChatSendBtn = (Button) this.findViewById(R.id.mChatSendBtn);
		mChatSendBtn.setOnClickListener(this);
	}

	class ChatAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return messages.size();
		}

		@Override
		public Object getItem(int position) {
			return messages.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView view = new TextView(ChatActivity.this);
			view.setText(EmojiParser.getInstance(ChatActivity.this).convertToEmoji(messages.get(position)));
			return view;
		}

	}


	@Override
	public void onEmoticonTap(String drawableId) {
		Editable editable = mChatEditorTxt.getText();
		int index = mChatEditorTxt.getSelectionEnd();
		String emo = EmojiParser.getInstance(this).convertToUnicode(drawableId);
		SpannableStringBuilder builder = new SpannableStringBuilder(emo);
		int resId = getResources().getIdentifier("emoji_" + drawableId, "drawable", getPackageName());
		Drawable d = getResources().getDrawable(resId);
		d.setBounds(0, 0, 30, 30);
		ImageSpan span = new ImageSpan(d);
		builder.setSpan(span, 0, emo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		if (index < mChatEditorTxt.length()) {
			editable.insert(index, builder);
		}else {
			editable.append(builder);
		}
		mChatEditorTxt.setSelection(index + emo.length());
		
		
//		drawableSrc = "emoji_" + drawableId;
//		ImageGetter imageGetter = new ImageGetter() {
//			public Drawable getDrawable(String source) {
//				int id = ChatActivity.this.getResources().getIdentifier(source, "drawable", getPackageName());
//				Drawable d = ChatActivity.this.getResources().getDrawable(id);
//				d.setBounds(0, 0, 24, 24);
//				return d;
//			}
//		};
//		CharSequence cs1 = Html.fromHtml("<img src='" + drawableSrc + "'/>", imageGetter, null);
//		int index = mChatEditorTxt.getSelectionStart();
//		Editable etb = mChatEditorTxt.getText();
//		int length = etb.length();
//		if (index < length) {
//			etb.insert(index, cs1);
//		} else {
//			mChatEditorTxt.append(cs1);
//		}
//		mChatEditorTxt.setSelection(index + 1);
	}

	@Override
	public void onEmoticonDel() {
		mChatEditorTxt.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
		mChatEditorTxt.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
	}

	@Override
	public void onClick(View v) {
		String message = mChatEditorTxt.getText().toString();
		if (!"".equals(message.trim())) {
			messages.add(message);
			adapter.notifyDataSetChanged();
			Trace.d(message);
		}
	}
}