package co.touchlab.droidconandroid.tasks;
import android.content.Context;
import java.sql.SQLException;
import co.touchlab.android.threading.eventbus.EventBusExt;
import co.touchlab.android.threading.tasks.Task;
import co.touchlab.droidconandroid.CrashReport;
import co.touchlab.droidconandroid.data.AppPrefs;
import co.touchlab.droidconandroid.data.DatabaseHelper;
import co.touchlab.droidconandroid.data.UserAccount;
import co.touchlab.droidconandroid.data.UserAuthHelper;
import co.touchlab.droidconandroid.network.dao.UserInfoResponse;
/**
* Created by kgalligan on 4/8/16.
*/
public abstract class AbstractFindUserTask extends Task
{
public String errorStringCode;
public UserAccount user;
@Override
protected boolean handleError(Context context, Throwable e)
{
CrashReport.logException(e);
errorStringCode = "error_unknown";
return true;
}
@Override
protected void onComplete(Context context)
{
EventBusExt.getDefault().post(this);
}
interface LoadFromDb
{
UserAccount load() throws SQLException;
}
interface LoadUserInfo
{
UserInfoResponse load();
}
void handleData(Context context, LoadFromDb loadFromDb, LoadUserInfo loadUserInfo) throws SQLException
{
user = loadFromDb.load();
if (user != null)
{
EventBusExt.getDefault().post(this);
}
UserInfoResponse response = loadUserInfo.load();
if(response != null)
{
UserAccount updatedUser = saveUserResponse(context, user, response);
if (updatedUser == null)
{
// cancelPost()
}
else
{
this.user = updatedUser;
}
}
}
public boolean isError()
{
return errorStringCode != null;
}
public static UserAccount saveUserResponse(Context context, UserAccount user, UserInfoResponse response) throws SQLException
{
UserAccount newDbUser = new UserAccount();
UserAuthHelper.userAccountToDb(response.user, newDbUser);
if(user == null || !user.equals(newDbUser))
{
DatabaseHelper databaseHelper = DatabaseHelper.getInstance(context);
databaseHelper.getUserAccountDao().createOrUpdate(newDbUser);
if(AppPrefs.getInstance(context).getUserId().equals(newDbUser.id))
{
UserAuthHelper.saveDrawerAppPrefs(context, newDbUser);
}
return newDbUser;
}
return null;
}
}