package com.vyke.android.qbchat.utils;
import android.content.Context;
import com.quickblox.core.QBCallback;
import com.quickblox.core.QBCallbackImpl;
import com.quickblox.core.result.Result;
import com.quickblox.module.users.QBUsers;
import com.quickblox.module.users.model.QBUser;
import com.quickblox.module.users.result.QBUserResult;
import com.vyke.android.contact.ContactAPI;
import com.vyke.android.models.Contact;
import com.vyke.android.qbchat.dao.ChatDBAdapter;
import com.vyke.android.qbchat.models.Buddy;
import com.vyke.android.qbchat.models.ChatMessage;
import com.vyke.android.utils.ApiConstants;
public class ChatHelper {
private static final String LOG_TAG = "ChatHelper";
private Lo lo = new Lo(this);
private ChatDBAdapter chatDBAdapter;
private Context context;
private ChatMessage chatMessageOrNull;
private ContactResult contactResult;
public ChatHelper(Context context) {
this.context = context;
if (chatDBAdapter == null || chatDBAdapter.isDatabaseOpen() == false){
chatDBAdapter = ChatDBAdapter.getInstance(context);
}
}
public void synchronizeBuddyAndContact(String jid, ChatMessage chatMessageOrNull) {
lo.gt(LOG_TAG, ">>> synchronizeBuddyAndContact(jid, chatMessageOrNull): " + jid + ", " + chatMessageOrNull);
if (jid == null){
contactResult.onSyncContactError();
return;
}
this.chatMessageOrNull = chatMessageOrNull;
Buddy buddy = chatDBAdapter.fetchBuddyByJid(jid);
if (buddy.getContactId() == null && buddy.getPhoneNumber() == null) {
int qbId = getQbUserIdFromJid(jid);
lo.gt(LOG_TAG, ">>> getQbUserIdFromJid(jid): " + qbId);
QBUsers.getUser(qbId, getQbUserCallback);
} else {
syncComplete(buddy);
}
}
private QBCallback getQbUserCallback = new QBCallbackImpl() {
@Override
public void onComplete(Result result) {
lo.gt(LOG_TAG, ">>> [getQbUserCallback] onComplete(Result result): " + result);
if (chatDBAdapter == null || chatDBAdapter.isDatabaseOpen() == false) {
chatDBAdapter = ChatDBAdapter.getInstance(context);
}
if (result.isSuccess()) {
QBUser user = ((QBUserResult) result).getUser();
String qbUserChatJid = getBuddyJidFromQbUserId(user.getId());
Buddy buddy = chatDBAdapter.fetchBuddyByJid(qbUserChatJid);
String phone = user.getLogin();
lo.gt(LOG_TAG, "QBUser login (phone number): " + phone);
Contact contact = ContactAPI.getAPI().getContactByPhone(context, phone);
lo.gt(LOG_TAG, "contact = " + contact);
if (contact != null) {
buddy.setContactId(contact.getId());
}
buddy.setPhoneNumber(phone);
chatDBAdapter.updateBuddy(buddy);
syncComplete(buddy);
} else {
lo.gt(LOG_TAG, result.getErrors());
if (contactResult != null) {
contactResult.onSyncContactError();
}
}
}
@Override
public void onComplete(Result result, Object context){
lo.gt(LOG_TAG, ">>> [getQbUserCallback] onComplete(Result result, Object context): " + result);
}
};
private void syncComplete(Buddy buddy) {
lo.gt(LOG_TAG, "syncComplete(Buddy buddy), contactResult: " + contactResult);
if (contactResult != null) {
contactResult.onSyncContactComplete(buddy, this.chatMessageOrNull);
}
}
public String getBuddyHumanReadableName(Buddy buddy){
lo.gt(LOG_TAG, "getBuddyHumanReadableName(Buddy buddy)");
String buddyHumanName = "unknown";
if (buddy.getContactId() != null) {
Contact contact = ContactAPI.getAPI().getContact(context, buddy.getContactId(), null);
buddyHumanName = contact.getDisplayName();
} else if (buddy.getPhoneNumber() != null) {
Contact contact = ContactAPI.getAPI().getContactByPhone(context, buddy.getPhoneNumber());
if (contact != null) {
buddyHumanName = contact.getDisplayName();
}
} else {
Integer qbUserId = getQbUserIdFromJid(buddy.getJid());
if (qbUserId != null) buddyHumanName = String.valueOf(qbUserId);
}
return buddyHumanName;
}
public int getQbUserIdFromJid(String buddyJid) {
int qbUserId;
String qbId = buddyJid.split("-")[0];
qbUserId = Integer.parseInt(qbId);
return qbUserId;
}
public String getBuddyJidFromQbUserId(int qbUserId){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(String.valueOf(qbUserId));
stringBuilder.append("-").append(ApiConstants.QB_APP_ID).append(ApiConstants.MAIL);
return stringBuilder.toString();
}
public interface ContactResult {
void onSyncContactComplete(Buddy buddy, ChatMessage chatMessageOrNull);
void onSyncContactError();
}
}