package com.tresorit.zerokitsdk.viewmodel;
import android.databinding.BaseObservable;
import android.databinding.ObservableField;
import android.text.TextUtils;
import android.view.View;
import com.tresorit.zerokit.AdminApi;
import com.tresorit.zerokit.PasswordEditText;
import com.tresorit.zerokit.Zerokit;
import com.tresorit.zerokit.call.Action;
import com.tresorit.zerokit.response.IdentityTokens;
import com.tresorit.zerokit.response.ResponseAdminApiError;
import com.tresorit.zerokit.response.ResponseAdminApiLoginByCode;
import com.tresorit.zerokit.response.ResponseZerokitError;
import com.tresorit.zerokit.response.ResponseZerokitLogin;
import com.tresorit.zerokitsdk.message.LoginFinisedMessage;
import com.tresorit.zerokitsdk.message.ShowMessageMessage;
import org.greenrobot.eventbus.EventBus;
import javax.inject.Inject;
public class LoginViewModel extends BaseObservable {
@SuppressWarnings("WeakerAccess")
public final ObservableField<String> userName;
@SuppressWarnings("WeakerAccess")
public final ObservableField<String> passwordError;
@SuppressWarnings("WeakerAccess")
public final ObservableField<String> usernameError;
@SuppressWarnings("WeakerAccess")
public final ObservableField<Boolean> inProgress;
@SuppressWarnings("WeakerAccess")
public final View.OnClickListener clickListenerLogin;
@SuppressWarnings("WeakerAccess")
public final View.OnFocusChangeListener focusChangeListener;
@SuppressWarnings("WeakerAccess")
public final PasswordEditText.PasswordExporter passwordExporter;
@SuppressWarnings("WeakerAccess")
final Zerokit zerokit;
@SuppressWarnings("WeakerAccess")
final AdminApi adminApi;
@SuppressWarnings("WeakerAccess")
final EventBus eventBus;
@SuppressWarnings("WeakerAccess")
final Action<ResponseZerokitError> errorResponseHandlerSdk;
@SuppressWarnings("WeakerAccess")
final Action<ResponseAdminApiError> errorResponseHandlerAdminapi;
@Inject
public LoginViewModel(Zerokit zerokit, AdminApi adminApi, final EventBus eventBus) {
this.zerokit = zerokit;
this.adminApi = adminApi;
this.eventBus = eventBus;
this.passwordExporter = new PasswordEditText.PasswordExporter();
this.clickListenerLogin = new View.OnClickListener() {
@Override
public void onClick(View view) {
attemptLogin();
}
};
userName = new ObservableField<>("");
passwordError = new ObservableField<>("");
usernameError = new ObservableField<>("");
inProgress = new ObservableField<>(false);
errorResponseHandlerSdk = new Action<ResponseZerokitError>() {
@Override
public void call(ResponseZerokitError errorResponse) {
inProgress.set(false);
eventBus.post(new ShowMessageMessage(errorResponse.toString()));
}
};
errorResponseHandlerAdminapi = new Action<ResponseAdminApiError>() {
@Override
public void call(ResponseAdminApiError errorResponse) {
inProgress.set(false);
eventBus.post(new ShowMessageMessage(errorResponse.toString()));
}
};
focusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
passwordError.set("");
usernameError.set("");
}
};
}
@SuppressWarnings("WeakerAccess")
void attemptLogin() {
if (TextUtils.isEmpty(userName.get())) usernameError.set("Required");
else if (passwordExporter.isEmpty()) passwordError.set("Required");
else login(userName.get(), passwordExporter);
}
private void login(String username, final PasswordEditText.PasswordExporter passwordExporter) {
inProgress.set(true);
adminApi.getUserId(username).enqueue(new Action<String>() {
@Override
public void call(String userId) {
zerokit.login(userId, passwordExporter).enqueue(new Action<ResponseZerokitLogin>() {
@Override
public void call(ResponseZerokitLogin responseLogin) {
zerokit.getIdentityTokens(adminApi.getClientId()).enqueue(new Action<IdentityTokens>() {
@Override
public void call(IdentityTokens identityTokens) {
adminApi.login(identityTokens.getAuthorizationCode()).enqueue(new Action<ResponseAdminApiLoginByCode>() {
@Override
public void call(ResponseAdminApiLoginByCode responseAdminApiLoginByCode) {
adminApi.setToken(responseAdminApiLoginByCode.getId());
inProgress.set(false);
eventBus.post(new LoginFinisedMessage());
}
}, errorResponseHandlerAdminapi);
}
}, errorResponseHandlerSdk);
}
}, errorResponseHandlerSdk);
}
}, errorResponseHandlerAdminapi);
}
}