package com.pinthecloud.athere.fragment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.format.Time;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import com.pinthecloud.athere.AhGlobalVariable;
import com.pinthecloud.athere.R;
import com.pinthecloud.athere.activity.SquareActivity;
import com.pinthecloud.athere.adapter.SquareListAdapter;
import com.pinthecloud.athere.dialog.SquareEnterDialog;
import com.pinthecloud.athere.interfaces.AhDialogCallback;
import com.pinthecloud.athere.interfaces.AhListCallback;
import com.pinthecloud.athere.interfaces.AhPairEntityCallback;
import com.pinthecloud.athere.model.AhMessage;
import com.pinthecloud.athere.model.AhUser;
import com.pinthecloud.athere.model.Square;
import com.pinthecloud.athere.util.AsyncChainer;
import com.pinthecloud.athere.util.AsyncChainer.Chainable;
public class SquareListFragment extends AhFragment {
private ProgressBar progressBar;
private RecyclerView squareListView;
private SquareListAdapter squareListAdapter;
private RecyclerView.LayoutManager squareListLayoutManager;
private List<Square> squareList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_square_list, container, false);
findComponent(view);
setSquareList();
updateSquareList();
return view;
}
private void findComponent(View view){
progressBar = (ProgressBar)view.findViewById(R.id.square_list_frag_progress_bar);
squareListView = (RecyclerView)view.findViewById(R.id.square_list_frag_list);
}
private void setSquareList(){
squareListView.setHasFixedSize(true);
squareListLayoutManager = new LinearLayoutManager(context);
squareListView.setLayoutManager(squareListLayoutManager);
squareList = new ArrayList<Square>();
squareListAdapter = new SquareListAdapter(thisFragment, squareList, new SquareListViewItemClickListener());
squareListView.setAdapter(squareListAdapter);
}
private void updateSquareList(){
squareHelper.getAllSquareList(thisFragment, new AhListCallback<Square>() {
@Override
public void onCompleted(List<Square> list, int count) {
progressBar.setVisibility(View.GONE);
Collections.sort(list, new Comparator<Square>(){
@Override
public int compare(Square lhs, Square rhs) {
return lhs.getName().compareTo(rhs.getName());
}
});
Collections.sort(list, new Comparator<Square>(){
@Override
public int compare(Square lhs, Square rhs) {
return lhs.isAdmin() == rhs.isAdmin() ? 0 :
!lhs.isAdmin() ? 1 : -1;
}
});
squareList.clear();
squareList.addAll(list);
squareListAdapter.notifyDataSetChanged();
}
});
}
private void enterSquare(final Square square){
progressBar.setVisibility(View.VISIBLE);
progressBar.bringToFront();
squareListView.setEnabled(false);
AsyncChainer.asyncChain(thisFragment, new Chainable(){
@Override
public void doNext(AhFragment frag) {
final AhUser user = userHelper.getMyUserInfo();
userHelper.enterSquareAsync(frag, user, square.getId(), new AhPairEntityCallback<String, List<AhUser>>() {
@Override
public void onCompleted(String userId, List<AhUser> list) {
userDBHelper.addAllUsers(list);
}
});
}
}, new Chainable() {
@Override
public void doNext(AhFragment frag) {
String enterMessage = getResources().getString(R.string.enter_square_message);
String greetingMessage = getResources().getString(R.string.greeting_sentence);
AhUser user = userHelper.getMyUserInfo();
AhMessage message = new AhMessage.Builder()
.setContent(" " + enterMessage + "\n" + greetingMessage)
.setSender(user.getNickName())
.setSenderId(user.getId())
.setReceiverId(square.getId())
.setType(AhMessage.TYPE.ENTER_SQUARE).build();
messageHelper.sendMessageAsync(frag, message, null);
}
}, new Chainable(){
@Override
public void doNext(AhFragment frag) {
progressBar.setVisibility(View.GONE);
squareListView.setEnabled(true);
Time time = new Time();
time.setToNow();
squareHelper.setMySquareId(square.getId())
.setMySquareName(square.getName())
.setMySquareResetTime(square.getResetTime())
.setSquareExitTab(SquareTabFragment.CHAT_TAB)
.setLoggedInSquare(true)
.setTimeStampAtLoggedInSquare(time.format("%Y:%m:%d:%H"))
.setReview(true);
Intent intent = new Intent();
intent.setClass(context, SquareActivity.class);
startActivity(intent);
activity.finish();
}
});
}
private class SquareListViewItemClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
int position = squareListView.getChildPosition(v);
final Square square = squareList.get(position);
if(square.getCode().equals("")){
enterSquare(square);
} else{
SquareEnterDialog enterDialog = new SquareEnterDialog(square, new AhDialogCallback() {
@Override
public void doPositiveThing(Bundle bundle) {
enterSquare(square);
}
@Override
public void doNegativeThing(Bundle bundle) {
// Do nothing
}
});
enterDialog.show(getFragmentManager(), AhGlobalVariable.DIALOG_KEY);
}
}
}
}