package com.example.lovetalk.activity;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;

import com.avos.avoscloud.AVException;
import com.avos.avoscloud.AVQuery;
import com.avos.avoscloud.AVUser;
import com.avos.avoscloud.FindCallback;
import com.example.lovetalk.DemoApplication;
import com.example.lovetalk.R;
import com.example.lovetalk.adapter.AddFriendAdapter;
import com.example.lovetalk.util.Utils;
import com.example.lovetalk.view.xlist.XListView;

import java.util.ArrayList;
import java.util.List;

public class AddFriendActivity extends BaseActivity implements OnClickListener, XListView.IXListViewListener, OnItemClickListener {
	private EditText mSearchNameEdit;
	private Button mSearchBtn;
	private List<AVUser> mUsers = new ArrayList<AVUser>();//change it first , then adapter
	private XListView mListView;
	private AddFriendAdapter mAdapter;
	private String mSearchName = "";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.contact_add_friend_activity);
		initView();
		search(mSearchName);
	}

	private void initView() {
		initActionBar(DemoApplication.context.getString(R.string.findFriends));
		mSearchNameEdit = (EditText) findViewById(R.id.searchNameEdit);
		mSearchBtn = (Button) findViewById(R.id.searchBtn);
		mSearchBtn.setOnClickListener(this);
		initXListView();
	}

	private void initXListView() {
		mListView = (XListView) findViewById(R.id.searchList);
		mListView.setPullLoadEnable(false);
		mListView.setPullRefreshEnable(false);
		mListView.setXListViewListener(this);

		mAdapter = new AddFriendAdapter(this, mUsers);
		mListView.setAdapter(mAdapter);
		mListView.setOnItemClickListener(this);
	}

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
		// TODO Auto-generated method stub
	}

	@Override
	public void onClick(View view) {
		switch (view.getId()) {
			case R.id.searchBtn:
				mSearchName = mSearchNameEdit.getText().toString();
				if (mSearchName != null) {
					mAdapter.clear();
					search(mSearchName);
				}
				break;
		}
	}

	private void search(String searchName) {
		searchUser(searchName, mAdapter.getCount(), new FindCallback<AVUser>() {
			@Override
			public void done(List<AVUser> users, AVException e) {
				stopLoadMore();
				if (e != null) {
					e.printStackTrace();
					Utils.toast("网络错误");
				} else {
					Utils.handleListResult(mListView, mAdapter, users);
				}
			}
		});
	}

	public void searchUser(String searchName, int skip,
						   FindCallback<AVUser> findCallback) {
		AVQuery<AVUser> q = AVUser.getQuery(AVUser.class);
		q.whereContains("username", searchName);
		q.limit(10);
		q.skip(skip);
		AVUser user = AVUser.getCurrentUser();
		List<String> friendIds = getFriendIds();
		friendIds.add(user.getObjectId());
		q.whereNotContainedIn("objectId", friendIds);
		q.orderByDescending("updateAt");
		q.setCachePolicy(AVQuery.CachePolicy.NETWORK_ELSE_CACHE);
		q.findInBackground(findCallback);
	}

	private static List<String> getFriendIds() {
		List<AVUser> friends = DemoApplication.context.getFriends();
		List<String> ids = new ArrayList<String>();
		for (AVUser friend : friends) {
			ids.add(friend.getObjectId());
		}
		return ids;
	}

	@Override
	public void onRefresh() {
		// TODO Auto-generated method stub
	}

	@Override
	public void onLoadMore() {
		// TODO Auto-generated method stub
		search(mSearchName);
	}

	private void stopLoadMore() {
		if (mListView.getPullLoading()) {
			mListView.stopLoadMore();
		}
	}
}