package com.ericliudeveloper.sharedbillhelper.ui.presenter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.ericliudeveloper.sharedbillhelper.R;
import com.ericliudeveloper.sharedbillhelper.model.Bill;
import com.ericliudeveloper.sharedbillhelper.model.Member;
import com.ericliudeveloper.sharedbillhelper.model.Payment;
import com.ericliudeveloper.sharedbillhelper.util.CustomEvents;
import com.ericliudeveloper.sharedbillhelper.util.DigitUtils;
import com.ericliudeveloper.sharedbillhelper.util.MemberUtil;
import com.ericliudeveloper.sharedbillhelper.widget.CollectionView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by liu on 21/06/15.
*/
public class PaymentListPresenter extends BasePresenter implements CollectionView.CollectionViewCallbacks {
List<Payment> paymentList;
List<Bill> billList = new ArrayList(BillListPresenter.mSelection.values());
List<Member> memberList = new ArrayList(MemberListPresenter.mSelection.values());
PaymentListFace mCallbacks;
CollectionView.Inventory<Bill, Payment> mInventory;
public PaymentListPresenter(PaymentListFace callbacks) {
mCallbacks = callbacks;
}
public void onEvent(CustomEvents.EventCalculationFinished eventCalculationFinished) {
paymentList = eventCalculationFinished.paymentList;
// EventBus.getDefault().removeStickyEvent(eventCalculationFinished);
createHeaders(paymentList);
}
private void createHeaders(List<Payment> paymentList) {
if (billList.size() == 0 || paymentList.size() == 0) {
// todo error nothing to show
return;
}
List<CollectionView.Header> headerList = new ArrayList<>();
for (int i = 0; i < billList.size(); i++) {
int insertPosition = i * memberList.size();
CollectionView.Header<Bill> header = new CollectionView.Header<Bill>(insertPosition, billList.get(i));
headerList.add(header);
}
mInventory = new CollectionView.Inventory<Bill, Payment>(headerList, paymentList);
mCallbacks.setCollectionViewParameters(mInventory, this);
}
@Override
public RecyclerView.ViewHolder createHeaderViewHolder(ViewGroup parent) {
View billRow = LayoutInflater.from(parent.getContext()).inflate(R.layout.header_bill_row_layout, parent, false);
return new HeaderBillViewHolder(billRow);
}
@Override
public RecyclerView.ViewHolder createDataViewHolder(ViewGroup parent) {
View paymentRow = LayoutInflater.from(parent.getContext()).inflate(R.layout.payment_detail_row_layout, parent, false);
return new PaymenViewHolder(paymentRow);
}
@Override
public void bindHeaderViewHolder(RecyclerView.ViewHolder holder, int headerIndex) {
Bill bill = billList.get(headerIndex);
((HeaderBillViewHolder) holder).setItem(bill);
}
@Override
public void bindDataViewHolder(RecyclerView.ViewHolder holder, int dataIndex) {
Payment payment = paymentList.get(dataIndex);
((PaymenViewHolder)holder).setItem(payment);
}
public static class HeaderBillViewHolder extends RecyclerView.ViewHolder {
private TextView tvType, tvAmount, tvPaid, tvStartDay, tvEndDate ;
public HeaderBillViewHolder(View itemView) {
super(itemView);
tvType = (TextView) itemView.findViewById(R.id.tvType);
tvAmount = (TextView) itemView.findViewById(R.id.tvAmount);
tvPaid = (TextView) itemView.findViewById(R.id.tvPaid);
tvStartDay = (TextView) itemView.findViewById(R.id.tvStartDate);
tvEndDate = (TextView) itemView.findViewById(R.id.tvEndDate);
}
public void setItem(Bill bill) {
refreshDisplay(bill);
}
public void refreshDisplay(Bill bill) {
String type = bill.getType();
String amount = amount = DigitUtils.convertToDollarFormat(bill.getAmount());
String isPaid = bill.getPaid() > 0 ? tvAmount.getResources().getString(R.string.paid)
: tvAmount.getResources().getString(R.string.unpaid);
String startDay = bill.getStartDate();
String endDay = bill.getEndDate();
tvType.setText(type);
tvAmount.setText(amount);
tvPaid.setText(isPaid);
tvStartDay.setText(startDay);
tvEndDate.setText(endDay);
}
}
public static class PaymenViewHolder extends RecyclerView.ViewHolder {
TextView tvName, tvAmount, tvPayingDays, tvStartDate, tvEndDate;
public PaymenViewHolder(View itemView) {
super(itemView);
tvName = (TextView) itemView.findViewById(R.id.tvName);
tvAmount = (TextView) itemView.findViewById(R.id.tvAmount);
tvPayingDays = (TextView) itemView.findViewById(R.id.tvPayingDays);
tvStartDate = (TextView) itemView.findViewById(R.id.tvStartDate);
tvEndDate = (TextView) itemView.findViewById(R.id.tvEndDate);
}
public void setItem(Payment payment) {
long memberId = payment.getPayee_id();
Member member = MemberListPresenter.mSelection.get(memberId);
if (member == null) {
return;
}
String fullName = MemberUtil.getFullNameString(member);
tvName.setText(fullName);
String amount = DigitUtils.convertToDollarFormat(payment.getPayee_amount());
tvAmount.setText(amount);
String payingDays = String.valueOf(payment.getPayee_days());
tvPayingDays.setText(payingDays);
tvStartDate.setText(payment.getPayee_start_date());
tvEndDate.setText(payment.getPayee_end_date());
}
}
public interface PaymentListFace {
void setCollectionViewParameters(CollectionView.Inventory inventory, CollectionView.CollectionViewCallbacks callbacks);
}
}