package com.jialin.chat;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import android.annotation.SuppressLint;
import android.content.Context;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;

//import com.nostra13.universalimageloader.core.DisplayImageOptions;
//import com.nostra13.universalimageloader.core.ImageLoader;

public class MessageAdapter extends BaseAdapter {
	
	private Context context;
	private List<Message> data = null;
	
	public MessageAdapter(Context context, List<Message> list) {
		super();
		this.context = context;
		this.data = list;
	}

	@Override
	public int getCount() {
		return data != null ? data.size() : 0;
	}

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

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

	@Override
	public int getItemViewType(int position) {
		return this.data.get(position).getIsSend() ? 1 : 0;
	}
	
	@Override
	public int getViewTypeCount() {
		return 2;
	}


	
	@SuppressLint("InflateParams")
	public View getView(int position, View convertView, ViewGroup parent) {

		final Message message = data.get(position);
		boolean isSend = message.getIsSend();

		ViewHolder viewHolder = null;
		if (convertView == null) {
			viewHolder = new ViewHolder();
			if (isSend) {
				convertView = LayoutInflater.from(context).inflate(R.layout.msg_item_right, null);
			} else {
				convertView = LayoutInflater.from(context).inflate(R.layout.msg_item_left, null);
			}
			viewHolder.sendDateTextView = (TextView) convertView.findViewById(R.id.sendDateTextView);
			viewHolder.sendTimeTextView = (TextView) convertView.findViewById(R.id.sendTimeTextView);
			viewHolder.userAvatarImageView = (ImageView) convertView.findViewById(R.id.userAvatarImageView);
			viewHolder.userNameTextView = (TextView) convertView.findViewById(R.id.userNameTextView);
			viewHolder.textTextView = (TextView) convertView.findViewById(R.id.textTextView);
			viewHolder.photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
			viewHolder.faceImageView = (ImageView) convertView.findViewById(R.id.faceImageView);
			viewHolder.failImageView = (ImageView) convertView.findViewById(R.id.failImageView);
			viewHolder.sendingProgressBar = (ProgressBar) convertView.findViewById(R.id.sendingProgressBar);
			
			
			viewHolder.isSend = isSend;
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		
		try {
			String dateString = DateFormat.format("yyyy-MM-dd h:mmaa", message.getTime()).toString();
			String [] t = dateString.split(" ");
			viewHolder.sendDateTextView.setText(t[0]);
			viewHolder.sendTimeTextView.setText(t[1]);
			
			if(position == 0){
				viewHolder.sendDateTextView.setVisibility(View.VISIBLE);
			}else{
				//TODO is same day ?
				Message pmsg = data.get(position-1);
				if(inSameDay(pmsg.getTime(), message.getTime())){
					viewHolder.sendDateTextView.setVisibility(View.GONE);
				}else{
					viewHolder.sendDateTextView.setVisibility(View.VISIBLE);
				}
				
			}
			
		} catch (Exception e) {
		}
		
		viewHolder.userNameTextView.setText(message.getFromUserName());
		
		

		
		switch (message.getType()) {
		case 0://text
			viewHolder.textTextView.setText(message.getContent());
			viewHolder.textTextView.setVisibility(View.VISIBLE);
			viewHolder.photoImageView.setVisibility(View.GONE);
			viewHolder.faceImageView.setVisibility(View.GONE);
			if(message.getIsSend()){
				LayoutParams sendTimeTextViewLayoutParams = (LayoutParams) viewHolder.sendTimeTextView.getLayoutParams();
				sendTimeTextViewLayoutParams.addRule(RelativeLayout.LEFT_OF, R.id.textTextView);
				viewHolder.sendTimeTextView.setLayoutParams(sendTimeTextViewLayoutParams);
				
				LayoutParams layoutParams = (LayoutParams) viewHolder.failImageView.getLayoutParams();
				layoutParams.addRule(RelativeLayout.LEFT_OF, R.id.textTextView);
				if( message.getSendSucces() != null && message.getSendSucces() == false){
					viewHolder.failImageView.setVisibility(View.VISIBLE);
					viewHolder.failImageView.setLayoutParams(layoutParams);
				}else{
					viewHolder.failImageView.setVisibility(View.GONE);
				}
				
				if(message.getState() != null && message.getState() == 0){
					viewHolder.sendingProgressBar.setVisibility(View.VISIBLE);
					viewHolder.sendingProgressBar.setLayoutParams(layoutParams);
				}else{
					viewHolder.sendingProgressBar.setVisibility(View.GONE);
				}
				
			}else{
				viewHolder.failImageView.setVisibility(View.GONE);
				viewHolder.sendingProgressBar.setVisibility(View.GONE);
				
				LayoutParams sendTimeTextViewLayoutParams = (LayoutParams) viewHolder.sendTimeTextView.getLayoutParams();
				sendTimeTextViewLayoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.textTextView);
				viewHolder.sendTimeTextView.setLayoutParams(sendTimeTextViewLayoutParams);
			}
			
			
			break;
		case 1://photo
			viewHolder.textTextView.setVisibility(View.GONE);
			viewHolder.photoImageView.setVisibility(View.VISIBLE);
			viewHolder.faceImageView.setVisibility(View.GONE);
			
			//TODO set image
			int id = context.getResources().getIdentifier(message.getContent(), "drawable", context.getPackageName());
			viewHolder.photoImageView.setImageResource(id);
			
			
			if(message.getIsSend() ){
				LayoutParams sendTimeTextViewLayoutParams = (LayoutParams) viewHolder.sendTimeTextView.getLayoutParams();
				sendTimeTextViewLayoutParams.addRule(RelativeLayout.LEFT_OF, R.id.photoImageView);
				viewHolder.sendTimeTextView.setLayoutParams(sendTimeTextViewLayoutParams);
				
				LayoutParams layoutParams = (LayoutParams) viewHolder.failImageView.getLayoutParams();
				layoutParams.addRule(RelativeLayout.LEFT_OF, R.id.photoImageView);
				if(message.getSendSucces() != null && message.getSendSucces() == false){
					viewHolder.failImageView.setVisibility(View.VISIBLE);
					viewHolder.failImageView.setLayoutParams(layoutParams);
				}else{
					viewHolder.failImageView.setVisibility(View.GONE);
				}
				
				if(message.getState() != null && message.getState() == 0){
					viewHolder.sendingProgressBar.setVisibility(View.VISIBLE);
					viewHolder.sendingProgressBar.setLayoutParams(layoutParams);
				}else{
					viewHolder.sendingProgressBar.setVisibility(View.GONE);
				}
				
			}else{
				viewHolder.failImageView.setVisibility(View.GONE);
				LayoutParams sendTimeTextViewLayoutParams = (LayoutParams) viewHolder.sendTimeTextView.getLayoutParams();
				sendTimeTextViewLayoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.photoImageView);
				viewHolder.sendTimeTextView.setLayoutParams(sendTimeTextViewLayoutParams);
			}
			
			
			break;
			
		case 2://face
			viewHolder.photoImageView.setVisibility(View.GONE);
			viewHolder.textTextView.setVisibility(View.GONE);
			viewHolder.faceImageView.setVisibility(View.VISIBLE);
			int resId = context.getResources().getIdentifier(message.getContent(), "drawable", context.getPackageName());
			viewHolder.faceImageView.setImageResource(resId);
			
			if(message.getIsSend()){
				LayoutParams sendTimeTextViewLayoutParams = (LayoutParams) viewHolder.sendTimeTextView.getLayoutParams();
				sendTimeTextViewLayoutParams.addRule(RelativeLayout.LEFT_OF, R.id.faceImageView);
				viewHolder.sendTimeTextView.setLayoutParams(sendTimeTextViewLayoutParams);
				
				LayoutParams layoutParams = (LayoutParams) viewHolder.failImageView.getLayoutParams();
				layoutParams.addRule(RelativeLayout.LEFT_OF, R.id.faceImageView);
				if(message.getSendSucces() != null && message.getSendSucces() == false){
					viewHolder.failImageView.setVisibility(View.VISIBLE);
					viewHolder.failImageView.setLayoutParams(layoutParams);
				}else{
					viewHolder.failImageView.setVisibility(View.GONE);
				}
				
				if(message.getState() != null && message.getState() == 0){
					viewHolder.sendingProgressBar.setVisibility(View.VISIBLE);
					viewHolder.sendingProgressBar.setLayoutParams(layoutParams);
				}else{
					viewHolder.sendingProgressBar.setVisibility(View.GONE);
				}
				
			}else{
				viewHolder.failImageView.setVisibility(View.GONE);
				
				LayoutParams sendTimeTextViewLayoutParams = (LayoutParams) viewHolder.sendTimeTextView.getLayoutParams();
				sendTimeTextViewLayoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.faceImageView);
				viewHolder.sendTimeTextView.setLayoutParams(sendTimeTextViewLayoutParams);
			}
			
			break;

		default:
			viewHolder.textTextView.setText(message.getContent());
			viewHolder.photoImageView.setVisibility(View.GONE);
			viewHolder.faceImageView.setVisibility(View.GONE);
			break;
		}
		
//		viewHolder.textTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
		
		return convertView;
	}


	public List<Message> getData() {
		return data;
	}

	public void setData(List<Message> data) {
		this.data = data;
	}


	public static boolean inSameDay(Date date1, Date Date2) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date1);
		int year1 = calendar.get(Calendar.YEAR);
		int day1 = calendar.get(Calendar.DAY_OF_YEAR);

		calendar.setTime(Date2);
		int year2 = calendar.get(Calendar.YEAR);
		int day2 = calendar.get(Calendar.DAY_OF_YEAR);

		if ((year1 == year2) && (day1 == day2)) {
			return true;
		}
		return false;
	}


	static class ViewHolder {
		
		public ImageView	userAvatarImageView;
		public TextView 	sendDateTextView;
		public TextView 	userNameTextView;
		
		public TextView 	textTextView;
		public ImageView 	photoImageView;
		public ImageView 	faceImageView;
		
		public ImageView 	failImageView;
		public TextView 	sendTimeTextView;
		public ProgressBar 	sendingProgressBar;
		
		public boolean 		isSend = true;
	}


}