package com.fastaccess.ui.modules.editor;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.widget.EditText;
import com.fastaccess.R;
import com.fastaccess.data.dao.CommentRequestModel;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.provider.markdown.MarkDownProvider;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.EDIT_COMMIT_COMMENT_EXTRA;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.EDIT_GIST_COMMENT_EXTRA;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.EDIT_ISSUE_COMMENT_EXTRA;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.FOR_RESULT_EXTRA;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.NEW_COMMIT_COMMENT_EXTRA;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.NEW_GIST_COMMENT_EXTRA;
import static com.fastaccess.helper.BundleConstant.ExtraTYpe.NEW_ISSUE_COMMENT_EXTRA;
/**
* Created by Kosh on 27 Nov 2016, 1:31 AM
*/
class EditorPresenter extends BasePresenter<EditorMvp.View> implements EditorMvp.Presenter {
@Override public void onActionClicked(@NonNull EditText editText, @IdRes int id) {
if (editText.getSelectionEnd() == -1 || editText.getSelectionStart() == -1) {
return;
}
switch (id) {
case R.id.headerOne:
MarkDownProvider.addHeader(editText, 1);
break;
case R.id.headerTwo:
MarkDownProvider.addHeader(editText, 2);
break;
case R.id.headerThree:
MarkDownProvider.addHeader(editText, 3);
break;
case R.id.bold:
MarkDownProvider.addBold(editText);
break;
case R.id.italic:
MarkDownProvider.addItalic(editText);
break;
case R.id.strikethrough:
MarkDownProvider.addStrikeThrough(editText);
break;
case R.id.numbered:
MarkDownProvider.addList(editText, "1.");
break;
case R.id.bullet:
MarkDownProvider.addList(editText, "-");
break;
case R.id.header:
MarkDownProvider.addDivider(editText);
break;
case R.id.code:
MarkDownProvider.addCode(editText);
break;
case R.id.quote:
MarkDownProvider.addQuote(editText);
break;
case R.id.link:
MarkDownProvider.addLink(editText);
break;
case R.id.image:
MarkDownProvider.addPhoto(editText);
break;
case R.id.checkbox:
MarkDownProvider.addList(editText, "- [x]");
break;
case R.id.unCheckbox:
MarkDownProvider.addList(editText, "- [ ]");
break;
}
}
@Override public void onEditGistComment(long id, @Nullable CharSequence savedText, @NonNull String gistId) {
if (!InputHelper.isEmpty(savedText)) {
CommentRequestModel requestModel = new CommentRequestModel();
requestModel.setBody(savedText.toString());
makeRestCall(RestProvider.getGistService().editGistComment(gistId, id, requestModel),
comment -> sendToView(view -> view.onSendResultAndFinish(comment, false)));
}
}
@Override public void onSubmitGistComment(@Nullable CharSequence savedText, @NonNull String gistId) {
if (!InputHelper.isEmpty(savedText)) {
CommentRequestModel requestModel = new CommentRequestModel();
requestModel.setBody(savedText.toString());
makeRestCall(RestProvider.getGistService().createGistComment(gistId, requestModel),
comment -> sendToView(view -> view.onSendResultAndFinish(comment, true)));
}
}
@Override public void onHandleSubmission(@Nullable CharSequence savedText, @Nullable @BundleConstant.ExtraTYpe String extraType,
@Nullable String itemId, long id, @Nullable String login, int issueNumber,
@Nullable String sha) {
if (extraType == null) {
throw new NullPointerException("extraType is null");
}
switch (extraType) {
case EDIT_GIST_COMMENT_EXTRA:
if (itemId == null) {
throw new NullPointerException("itemId is null");
}
onEditGistComment(id, savedText, itemId);
break;
case NEW_GIST_COMMENT_EXTRA:
if (itemId == null) {
throw new NullPointerException("itemId is null");
}
onSubmitGistComment(savedText, itemId);
break;
case FOR_RESULT_EXTRA:
sendToView(EditorMvp.View::onSendMarkDownResult);
break;
case EDIT_ISSUE_COMMENT_EXTRA:
if (itemId == null || login == null) {
throw new NullPointerException("itemId or login is null");
}
onEditIssueComment(savedText, itemId, id, login, issueNumber);
break;
case NEW_ISSUE_COMMENT_EXTRA:
if (itemId == null || login == null) {
throw new NullPointerException("itemId or login is null");
}
onSubmitIssueComment(savedText, itemId, login, issueNumber);
break;
case NEW_COMMIT_COMMENT_EXTRA:
if (itemId == null || login == null || sha == null) {
throw new NullPointerException("itemId or login is null");
}
onSubmitCommitComment(savedText, itemId, login, sha);
break;
case EDIT_COMMIT_COMMENT_EXTRA:
if (itemId == null || login == null) {
throw new NullPointerException("itemId or login is null");
}
onEditCommitComment(savedText, itemId, login, id);
break;
}
}
@Override public void onSubmitIssueComment(CharSequence savedText, @NonNull String itemId, @NonNull String login, int issueNumber) {
if (!InputHelper.isEmpty(savedText)) {
CommentRequestModel requestModel = new CommentRequestModel();
requestModel.setBody(savedText.toString());
makeRestCall(RestProvider.getIssueService().createIssueComment(login, itemId, issueNumber, requestModel),
comment -> sendToView(view -> view.onSendResultAndFinish(comment, true)));
}
}
@Override public void onEditIssueComment(CharSequence savedText, @NonNull String itemId, long id, @NonNull String login, int issueNumber) {
if (!InputHelper.isEmpty(savedText)) {
CommentRequestModel requestModel = new CommentRequestModel();
requestModel.setBody(savedText.toString());
makeRestCall(RestProvider.getIssueService().editIssueComment(login, itemId, id, requestModel),
comment -> sendToView(view -> view.onSendResultAndFinish(comment, false)));
}
}
@Override public void onSubmitCommitComment(CharSequence savedText, @NonNull String itemId, @NonNull String login, @NonNull String sha) {
if (!InputHelper.isEmpty(savedText)) {
CommentRequestModel requestModel = new CommentRequestModel();
requestModel.setBody(savedText.toString());
makeRestCall(RestProvider.getRepoService().postCommitComment(login, itemId, sha, requestModel),
comment -> sendToView(view -> view.onSendResultAndFinish(comment, true)));
}
}
@Override public void onEditCommitComment(CharSequence savedText, @NonNull String itemId, @NonNull String login, long id) {
if (!InputHelper.isEmpty(savedText)) {
CommentRequestModel requestModel = new CommentRequestModel();
requestModel.setBody(savedText.toString());
makeRestCall(RestProvider.getRepoService().editCommitComment(login, itemId, id, requestModel),
comment -> sendToView(view -> view.onSendResultAndFinish(comment, false)));
}
}
}