package com.kickstarter.ui.viewholders;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Pair;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.kickstarter.R;
import com.kickstarter.libs.KSString;
import com.kickstarter.libs.utils.ObjectUtils;
import com.kickstarter.libs.utils.ProjectUtils;
import com.kickstarter.models.Project;
import com.kickstarter.viewmodels.ProjectSearchResultHolderViewModel;
import com.squareup.picasso.Picasso;
import butterknife.Bind;
import butterknife.BindString;
import butterknife.ButterKnife;
import static com.kickstarter.libs.rx.transformers.Transformers.observeForUI;
public class ProjectSearchResultViewHolder extends KSViewHolder {
protected final Delegate delegate;
private final KSString ksString;
private final ProjectSearchResultHolderViewModel.ViewModel viewModel;
@Bind(R.id.search_result_deadline_countdown_text_view) TextView deadlineCountdownValueTextView;
@Bind(R.id.search_result_deadline_unit_text_view) TextView deadlineCountdownUnitTextView;
@Bind(R.id.project_name_text_view) TextView projectNameTextView;
@Bind(R.id.project_image_view) ImageView projectImageView;
@Bind(R.id.search_result_percent_funded_text_view) TextView percentFundedTextView;
@Bind(R.id.search_result_funded_text_view) TextView fundedTextView;
@BindString(R.string.discovery_baseball_card_stats_funded) String fundedString;
@BindString(R.string.discovery_baseball_card_time_left_to_go) String toGoString;
public interface Delegate {
void projectSearchResultClick(ProjectSearchResultViewHolder viewHolder, Project project);
}
public ProjectSearchResultViewHolder(final @NonNull View view, final @NonNull Delegate delegate) {
super(view);
this.viewModel = new ProjectSearchResultHolderViewModel.ViewModel(environment());
this.delegate = delegate;
this.ksString = environment().ksString();
ButterKnife.bind(this, view);
this.viewModel.outputs.deadlineCountdownValueTextViewText()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(this.deadlineCountdownValueTextView::setText);
this.viewModel.outputs.notifyDelegateOfResultClick()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(project -> this.delegate.projectSearchResultClick(this, project));
this.viewModel.outputs.percentFundedTextViewText()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(this.percentFundedTextView::setText);
this.viewModel.outputs.projectForDeadlineCountdownUnitTextView()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(p ->
this.deadlineCountdownUnitTextView.setText(ProjectUtils.deadlineCountdownDetail(p, context(), this.ksString))
);
this.viewModel.outputs.projectNameTextViewText()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(this.projectNameTextView::setText);
this.viewModel.outputs.projectPhotoUrl()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(this::setProjectImageUrl);
this.fundedTextView.setText(this.fundedString);
}
@Override
public void bindData(final @Nullable Object data) throws Exception {
@SuppressWarnings("unchecked")
final Pair<Project, Boolean> projectAndIsFeatured = ObjectUtils.requireNonNull((Pair<Project, Boolean>) data);
this.viewModel.inputs.configureWith(projectAndIsFeatured);
}
private void setProjectImageUrl(final @NonNull String imageUrl) {
Picasso.with(context()).load(imageUrl).into(this.projectImageView);
}
@Override
public void onClick(final @NonNull View view) {
this.viewModel.inputs.projectClicked();
}
}