package com.beem.project.beem.ui;

import android.app.Activity;
import android.app.Dialog;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.beem.project.beem.R;
import com.beem.project.beem.service.Contact;
import com.beem.project.beem.service.aidl.IXmppFacade;

/**
 * This activity class provides the view to show dialog when long click on
 * contact list.
 * 
 * @author marseille
 */
public class ContactDialog extends Dialog {

	private static final Intent SERVICE_INTENT = new Intent();
	private final Contact mContact;
	private final Context mContext;
	private IXmppFacade mXmppFacade;
	private final ServiceConnection mServConn = new BeemServiceConnection();

	static {
		SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
	}

	/**
	 * Constructor.
	 * 
	 * @param context
	 *            context where is call the dialog.
	 * @param curContact
	 *            current contact.
	 */
	public ContactDialog(final Context context, final Contact curContact) {
		super(context);
		mContext = context;

		setContentView(R.layout.contactdialog);
		mContact = curContact;
		setTitle(curContact.getJID());

		Button button = (Button) findViewById(R.id.CDChat);
		button.setOnClickListener(new ChatListener());
		button = (Button) findViewById(R.id.CDInfos);
		button.setOnClickListener(new InfosListener());
		button = (Button) findViewById(R.id.CDCall);
		button.setOnClickListener(new CallListener());
		mContext.bindService(SERVICE_INTENT, mServConn, Service.BIND_AUTO_CREATE);
	}

	@Override
	public void dismiss() {
		super.dismiss();
		mContext.unbindService(mServConn);
	}

	/**
	 * Event simple click on call button.
	 */
	class CallListener implements View.OnClickListener {

		/**
		 * Constructor.
		 */
		public CallListener() {
		}

		@Override
		public void onClick(View v) {
			try {
				// TODO permettre a l'user de choisir a quel ressource il veut
				// faire le call.
				mXmppFacade.call(mContact.getJID() + "/psi");
			} catch (RemoteException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * Event simple click on chat button.
	 */
	class ChatListener implements View.OnClickListener {

		/**
		 * Constructor.
		 */
		public ChatListener() {
		}

		@Override
		public void onClick(View v) {
			Activity a = ContactDialog.this.getOwnerActivity();
			Intent i = new Intent(mContext, Chat.class);
			i.setData(mContact.toUri());
			a.startActivity(i);
			dismiss();
		}

	}

	/**
	 * Event simple click on info button.
	 */
	class InfosListener implements View.OnClickListener {

		/**
		 * Constructor.
		 */
		public InfosListener() {
		}

		@Override
		public void onClick(View v) {
			Activity a = ContactDialog.this.getOwnerActivity();
			Intent i = new Intent(mContext, UserInfo.class);
			Log.i("OOO", mContact.getJID());
			i.putExtra("contact_contactdialog", mContact.getJID());
			a.startActivity(i);
			dismiss();
		}

	}

	/**
	 * The service connection used to connect to the Beem service.
	 */
	private class BeemServiceConnection implements ServiceConnection {

		/**
		 * Constructor.
		 */
		public BeemServiceConnection() {
		}

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			mXmppFacade = IXmppFacade.Stub.asInterface(service);
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {
			mXmppFacade = null;
		}
	}

}
