package com.mozu.mozuandroidinstoreassistant.app.order.adapters;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.mozu.api.contracts.commerceruntime.orders.Order;
import com.mozu.api.contracts.commerceruntime.orders.OrderAttribute;
import com.mozu.api.contracts.commerceruntime.orders.OrderItem;
import com.mozu.mozuandroidinstoreassistant.app.R;
import com.mozu.mozuandroidinstoreassistant.app.data.IData;
import com.mozu.mozuandroidinstoreassistant.app.data.order.CouponsRowItem;
import com.mozu.mozuandroidinstoreassistant.app.data.order.OrderAttributeHeaderItem;
import com.mozu.mozuandroidinstoreassistant.app.data.order.OrderAttributeRowItem;
import com.mozu.mozuandroidinstoreassistant.app.data.order.OrderHeaderItemRow;
import com.mozu.mozuandroidinstoreassistant.app.data.order.OrderItemRow;
import com.mozu.mozuandroidinstoreassistant.app.data.order.OrderTotalRow;
import com.mozu.mozuandroidinstoreassistant.app.data.order.ShippingItemRow;
import com.mozu.mozuandroidinstoreassistant.app.layout.IRowLayout;
import com.mozu.mozuandroidinstoreassistant.app.layout.order.IEditMode;
import com.mozu.mozuandroidinstoreassistant.app.layout.order.NewOrderCouponLayout;
import com.mozu.mozuandroidinstoreassistant.app.layout.order.NewOrderShippingItemLayout;
import com.mozu.mozuandroidinstoreassistant.app.layout.order.NewOrderTotalLayout;
import java.util.ArrayList;
import java.util.List;
public class NewOrderProductAdapter extends BaseAdapter {
private boolean editMode;
private List<IData> mData;
private NewOrderShippingItemLayout.OrderUpdateListener mUpdateListener;
public NewOrderProductAdapter(NewOrderShippingItemLayout.OrderUpdateListener updateListener) {
mUpdateListener = updateListener;
mData = new ArrayList<IData>();
mData.add(new OrderHeaderItemRow());
}
public void setEditMode(boolean editMode) {
this.editMode = editMode;
}
@Override
public boolean isEnabled(int position) {
return getRowType(position) == RowType.ORDER_ITEM_ROW;
}
public void addData(Order order) {
mData.clear();
mData.add(new OrderHeaderItemRow());
if (order != null && order.getItems() != null) {
for (OrderItem item : order.getItems()) {
mData.add(new OrderItemRow(item));
}
if (order.getItems().size() > 0) {
if (editMode) {
mData.add(new ShippingItemRow(order, order.getFulfillmentInfo()));
mData.add(new CouponsRowItem(order));
}
mData.add(new OrderTotalRow(order));
if (!editMode && (order.getAttributes() != null && order.getAttributes().size() > 0)) {
mData.add(new OrderAttributeHeaderItem());
mData.addAll(getOrderAttributes(order));
}
}
}
}
private List<IData> getOrderAttributes(Order order) {
List<IData> orderAttributes = new ArrayList<>();
if (order == null || order.getAttributes().size() < 1)
return orderAttributes;
for (OrderAttribute orderAttribute : order.getAttributes()) {
OrderAttributeRowItem orderItemRowItem = new OrderAttributeRowItem(orderAttribute);
orderAttributes.add(orderItemRowItem);
}
return orderAttributes;
}
@Override
public int getCount() {
return mData.size();
}
public RowType getRowType(int position) {
IData dataItem = getItem(position);
if (dataItem instanceof OrderItemRow) {
return RowType.ORDER_ITEM_ROW;
} else if (dataItem instanceof CouponsRowItem) {
return RowType.COUPON_ROW;
} else if (dataItem instanceof ShippingItemRow) {
return RowType.SHIPPING_ROW;
} else if (dataItem instanceof OrderTotalRow) {
return RowType.TOTAL_ROW;
} else if (dataItem instanceof OrderHeaderItemRow) {
return RowType.ORDER_HEADER_ROW;
} else if (dataItem instanceof OrderAttributeRowItem) {
return RowType.ORDER_ATTRIBUTE_ROW;
} else if (dataItem instanceof OrderAttributeHeaderItem) {
return RowType.ORDER_ATTRIBUTE_HEADER_ROW;
} else {
return RowType.EMPTY_ROW;
}
}
@Override
public int getItemViewType(int position) {
return getRowType(position).ordinal();
}
@Override
public int getViewTypeCount() {
return RowType.values().length;
}
@Override
public IData getItem(int i) {
return mData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
RowType rowType = getRowType(position);
if (convertView == null) {
if (rowType == RowType.ORDER_ITEM_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.new_order_product_item, viewGroup, false);
} else if (rowType == RowType.COUPON_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.new_order_coupon_item, viewGroup, false);
((NewOrderCouponLayout) convertView).setUpdateListener(mUpdateListener);
} else if (rowType == RowType.SHIPPING_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.new_order_shipping_item, viewGroup, false);
((NewOrderShippingItemLayout) convertView).setOrderUpdateListener(mUpdateListener);
} else if (rowType == RowType.TOTAL_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.new_order_summary_item, viewGroup, false);
((NewOrderTotalLayout) convertView).setUpdateListener(mUpdateListener);
} else if (rowType == RowType.ORDER_HEADER_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.neworder_header_layout, viewGroup, false);
return convertView;
} else if (rowType == RowType.ORDER_ATTRIBUTE_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.order_attribute_list_item, viewGroup, false);
} else if (rowType == RowType.ORDER_ATTRIBUTE_HEADER_ROW) {
convertView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.order_attribute_header, viewGroup, false);
return convertView;
}
}
IData orderItem = getItem(position);
if (convertView instanceof IRowLayout) {
((IRowLayout) convertView).bindData(orderItem);
}
if (convertView instanceof IEditMode) {
((IEditMode) convertView).setEditMode(editMode);
}
return convertView;
}
public enum RowType {
ORDER_HEADER_ROW,
ORDER_ITEM_ROW,
COUPON_ROW,
SHIPPING_ROW,
TOTAL_ROW,
ORDER_ATTRIBUTE_HEADER_ROW,
ORDER_ATTRIBUTE_ROW, EMPTY_ROW
}
}