package bg.mentormate.academy.radarapp.views;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseImageView;
import com.parse.ParseObject;
import com.parse.SaveCallback;
import bg.mentormate.academy.radarapp.Constants;
import bg.mentormate.academy.radarapp.R;
import bg.mentormate.academy.radarapp.activities.ProfileActivity;
import bg.mentormate.academy.radarapp.activities.RoomActivity;
import bg.mentormate.academy.radarapp.models.Room;
import bg.mentormate.academy.radarapp.models.User;
import bg.mentormate.academy.radarapp.tools.NotificationHelper;
/**
* Created by tl on 18.02.15.
*/
public class RoomItem extends LinearLayout implements View.OnClickListener {
private static final String USER_ID = "USER_ID";
private TextView mTvRoomName;
private TextView mTvUsername;
private ParseImageView mPivAvatar;
private RegisterButton mRbRegister;
private Button mBtnJoin;
private User mCurrentUser;
private Room mRoom;
public RoomItem(Context context) {
super(context);
init();
}
public RoomItem(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.item_room, this);
mTvRoomName = (TextView) findViewById(R.id.tvRoomName);
mTvUsername = (TextView) findViewById(R.id.tvUsername);
mPivAvatar = (ParseImageView) findViewById(R.id.pivAvatar);
mRbRegister = (RegisterButton) findViewById(R.id.rbRegister);
mBtnJoin = (Button) findViewById(R.id.btnJoin);
mTvUsername.setOnClickListener(this);
mPivAvatar.setOnClickListener(this);
mBtnJoin.setOnClickListener(this);
mRbRegister.setOnClickListener(this);
}
public void setData(User currentUser,Room room) {
mRoom = room;
mCurrentUser = currentUser;
mRoom.fetchIfNeededInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, ParseException e) {
if (mRoom.isDataAvailable()) {
mTvRoomName.setText(mRoom.getName());
final User user = mRoom.getCreatedBy();
user.fetchIfNeededInBackground(new GetCallback<ParseObject>() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void done(ParseObject parseObject, ParseException e) {
mTvUsername.setText(user.getUsername());
mPivAvatar.setParseFile(user.getAvatar());
if (user.getAvatar() != null) {
mPivAvatar.loadInBackground();
} else {
mPivAvatar.setBackground(getResources().getDrawable(R.drawable.ic_avatar));
}
}
});
mCurrentUser.fetchIfNeededInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, ParseException e) {
mRbRegister.setData(mCurrentUser, mRoom);
if (mRbRegister.isChecked()) {
setRegisteredVisibilityAndStyle();
} else {
setNotRegisteredVisibilityAndStyle();
}
}
});
}
}
});
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.tvUsername:
case R.id.pivAvatar:
goToProfile();
break;
case R.id.rbRegister:
onRegisterClicked();
break;
case R.id.btnJoin:
onJoinClicked();
break;
}
}
private void onRegisterClicked() {
if (!mRbRegister.isChecked()) {
if (mRoom.getUsers().contains(mCurrentUser)) {
setNotRegisteredVisibilityAndStyle();
removeUserFromRoom();
} else {
setNotRegisteredVisibilityAndStyle();
}
} else {
if (!mRoom.getUsers().contains(mCurrentUser)) {
checkForPassKey();
} else {
setRegisteredVisibilityAndStyle();
}
}
}
private void goToProfile() {
Intent profileIntent = new Intent(getContext(), ProfileActivity.class);
profileIntent.putExtra(USER_ID, mRoom.getCreatedBy().getObjectId());
getContext().startActivity(profileIntent);
}
private void onJoinClicked() {
goToRoom();
}
private void checkForPassKey() {
setNotRegisteredVisibilityAndStyle();
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
LayoutInflater inflater = LayoutInflater.from(getContext());
final View dvCreateRoom = inflater.inflate(R.layout.dialog_passkey_check, null);
final EditText etPassKey = (EditText) dvCreateRoom.findViewById(R.id.etPassKey);
builder.setView(dvCreateRoom)
.setTitle(getContext().getString(R.string.check_keypass_title))
.setPositiveButton(getContext().getString(R.string.room_register_text), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
String passKey = etPassKey.getText().toString().trim();
if (passKey.equals(mRoom.getPassKey())) {
addUserToRoom();
} else {
NotificationHelper.alert(getContext(),
getContext().getString(R.string.dialog_error_title),
getContext().getString(R.string.passkey_incorrect_message));
}
}
})
.setNegativeButton(getContext().getString(R.string.cancel_btn), null);
AlertDialog dialog = builder.create();
dialog.show();
}
private void removeUserFromRoom() {
mRoom.getUsers().remove(mCurrentUser);
mRoom.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
setNotRegisteredVisibilityAndStyle();
} else {
NotificationHelper.alert(getContext(),
getContext().getString(R.string.dialog_error_title),
e.getMessage());
}
}
});
}
private void addUserToRoom() {
mRoom.getUsers().add(mCurrentUser);
mRoom.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
setRegisteredVisibilityAndStyle();
} else {
setNotRegisteredVisibilityAndStyle();
NotificationHelper.alert(getContext(),
getContext().getString(R.string.dialog_error_title),
e.getMessage());
}
}
});
}
private void setNotRegisteredVisibilityAndStyle() {
mRbRegister.setChecked(false);
mBtnJoin.setVisibility(View.GONE);
mRbRegister.setBackgroundColor(getResources().getColor(R.color.br_button));
mRbRegister.setTextColor(getResources().getColor(R.color.br_text));
}
private void setRegisteredVisibilityAndStyle() {
mRbRegister.setChecked(true);
mBtnJoin.setVisibility(View.VISIBLE);
mRbRegister.setBackgroundColor(getResources().getColor(R.color.br_toggle_on));
mRbRegister.setTextColor(getResources().getColor(android.R.color.white));
}
private void goToRoom() {
Intent roomIntent = new Intent(getContext(), RoomActivity.class);
roomIntent.putExtra(Constants.ROOM_ID, mRoom.getObjectId());
getContext().startActivity(roomIntent);
}
}