package com.fastaccess.ui.modules.search;
import android.support.annotation.NonNull;
import android.support.v4.view.ViewPager;
import android.widget.AutoCompleteTextView;
import com.annimon.stream.Stream;
import com.fastaccess.R;
import com.fastaccess.data.dao.model.SearchHistory;
import com.fastaccess.helper.AppHelper;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import com.fastaccess.ui.modules.search.code.SearchCodeFragment;
import com.fastaccess.ui.modules.search.issues.SearchIssuesFragment;
import com.fastaccess.ui.modules.search.repos.SearchReposFragment;
import com.fastaccess.ui.modules.search.users.SearchUsersFragment;
import java.util.ArrayList;
/**
* Created by Kosh on 08 Dec 2016, 8:20 PM
*/
class SearchPresenter extends BasePresenter<SearchMvp.View> implements SearchMvp.Presenter {
private ArrayList<SearchHistory> hints = new ArrayList<>();
@Override protected void onAttachView(@NonNull SearchMvp.View view) {
super.onAttachView(view);
if (hints.isEmpty()) {
manageSubscription(SearchHistory.getHistory()
.subscribe(strings -> {
hints.clear();
if (strings != null) hints.addAll(strings);
view.onNotifyAdapter(null);
}));
}
}
@NonNull @Override public ArrayList<SearchHistory> getHints() {
return hints;
}
@Override public void onSearchClicked(@NonNull ViewPager viewPager, @NonNull AutoCompleteTextView editText) {
boolean isEmpty = InputHelper.isEmpty(editText) || InputHelper.toString(editText).length() < 3;
editText.setError(isEmpty ? editText.getResources().getString(R.string.minimum_three_chars) : null);
if (!isEmpty) {
editText.dismissDropDown();
AppHelper.hideKeyboard(editText);
String query = InputHelper.toString(editText);
SearchReposFragment repos = (SearchReposFragment) viewPager.getAdapter().instantiateItem(viewPager, 0);
SearchUsersFragment users = (SearchUsersFragment) viewPager.getAdapter().instantiateItem(viewPager, 1);
SearchIssuesFragment issues = (SearchIssuesFragment) viewPager.getAdapter().instantiateItem(viewPager, 2);
SearchCodeFragment code = (SearchCodeFragment) viewPager.getAdapter().instantiateItem(viewPager, 3);
repos.onQueueSearch(query);
users.onQueueSearch(query);
issues.onQueueSearch(query);
code.onQueueSearch(query, true);
boolean noneMatch = Stream.of(hints).noneMatch(value -> value.getText().equalsIgnoreCase(query));
if (noneMatch) {
SearchHistory searchHistory = new SearchHistory(query);
manageSubscription(searchHistory.save(searchHistory).subscribe());
sendToView(view -> view.onNotifyAdapter(new SearchHistory(query)));
}
}
}
}