package com.luna.anytime;

import java.util.List;

import com.avos.avoscloud.AVException;
import com.avos.avoscloud.AVObject;
import com.avos.avoscloud.AVQuery;
import com.avos.avoscloud.FindCallback;
import com.avos.avoscloud.SaveCallback;
import com.luna.anytime.adapter.AnytimeUserResponseListAdapter;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class AboutAppActivity extends AnyTimeActivity {
	Button submitButton;
	EditText submitEditText;
	ListView mUserResponseListView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_about_app);
		this.getActionBar().setDisplayHomeAsUpEnabled(true);
		submitButton = (Button) findViewById(R.id.button_about_app_submit_user_input);
		submitEditText = (EditText) findViewById(R.id.editText_about_app_user_input);
		mUserResponseListView = (ListView) findViewById(R.id.listView_user_back);
		submitButton.setOnClickListener(buttonListener);

    FindCallback<AVObject> findCallback=new FindCallback<AVObject>() {
      public void done(List<AVObject> avObjects, AVException e) {
        if (e == null) {
          Message msg = new Message();
          msg.what = 3;
          msg.obj = avObjects;
          mHandler.sendMessage(msg);
        } else {
          showError(activity.getString(R.string.network_error));
        }
      }
    };
		AVQuery<AVObject> query = new AVQuery<AVObject>("SuggestionByUser");
		query.whereEqualTo("UserObjectId", getUserId());
		query.findInBackground(findCallback);
	}

	OnClickListener buttonListener = new OnClickListener() {

		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
      SaveCallback saveCallback=new SaveCallback() {
        @Override
        public void done(AVException e) {
          if (e == null) {
            mHandler.obtainMessage(1).sendToTarget();
          } else {
            mHandler.obtainMessage(2).sendToTarget();
          }
        }
      };
      String advice = submitEditText.getText().toString();
      AVService.createAdvice(getUserId(), advice, saveCallback);
		}
	};

  @SuppressLint("HandlerLeak")
	private Handler mHandler = new Handler() {
		@SuppressWarnings("unchecked")
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1:
				new AlertDialog.Builder(activity)
						.setTitle(
								activity.getResources().getString(
										R.string.dialog_message_success))
						.setMessage(
								activity.getResources()
										.getString(
												R.string.action_about_app_submit_message_success))
						.setNegativeButton(android.R.string.ok,
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										dialog.dismiss();
										submitEditText.setText("");
									}
								}).show();
				break;
			case 2:
				showError(activity
						.getString(R.string.action_about_app_submit_message_error));
				break;
			case 3:
				showResponseList((List<AVObject>) msg.obj);
				break;
			default:
				break;
			}
		}
	};

	private void showResponseList(List<AVObject> responseList) {
		if (responseList != null && responseList.size() != 0) {
			AnytimeUserResponseListAdapter adapter = new AnytimeUserResponseListAdapter(
					responseList, activity);
			mUserResponseListView.setAdapter(adapter);
			mUserResponseListView.setVisibility(View.VISIBLE);
		}
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		if (item.getItemId() == android.R.id.home) {
			finish();
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}