package com.mozu.mozuandroidinstoreassistant.app.layout.order;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.mozu.api.contracts.commerceruntime.discounts.InvalidCoupon;
import com.mozu.api.contracts.commerceruntime.orders.Order;
import com.mozu.api.contracts.productadmin.Discount;
import com.mozu.api.contracts.productadmin.DiscountCollection;
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.layout.IRowLayout;
import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachine;
import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachineProducer;
import com.mozu.mozuandroidinstoreassistant.app.order.loaders.NewOrderManager;
import java.util.ArrayList;
import java.util.List;
import rx.Subscriber;
import rx.subscriptions.CompositeSubscription;
public class NewOrderCouponLayout extends LinearLayout implements IRowLayout, IEditMode {
Spinner mSpinner;
private NewOrderShippingItemLayout.OrderUpdateListener mOrderUpdateListener;
private Integer mTenantId;
private Integer mSiteId;
private CompositeSubscription mCompositeSubscription;
public NewOrderCouponLayout(Context context) {
super(context);
init();
}
public NewOrderCouponLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public NewOrderCouponLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public void setUpdateListener(NewOrderShippingItemLayout.OrderUpdateListener updateCouponListener) {
mOrderUpdateListener = updateCouponListener;
}
private void init() {
UserAuthenticationStateMachine userStateMachine = UserAuthenticationStateMachineProducer.getInstance(getContext());
mTenantId = userStateMachine.getTenantId();
mSiteId = userStateMachine.getSiteId();
mCompositeSubscription = new CompositeSubscription();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mCompositeSubscription != null && !mCompositeSubscription.isUnsubscribed()) {
mCompositeSubscription.unsubscribe();
}
}
@Override
public void setEditMode(boolean isEditMode) {
mSpinner.setClickable(isEditMode);
mSpinner.setEnabled(isEditMode);
}
@Override
public void bindData(IData data) {
if (data instanceof CouponsRowItem) {
final CouponsRowItem couponsRowItem = (CouponsRowItem) data;
mSpinner = (Spinner) findViewById(R.id.coupon_spinner);
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.coupon_progress);
final Order order = couponsRowItem.mOrder;
final SpinnerAdapter spinnerAdapter = new SpinnerAdapter();
mSpinner.setAdapter(spinnerAdapter);
mSpinner.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (spinnerAdapter.getCount() <= 1) {
progressBar.setVisibility(VISIBLE);
mCompositeSubscription.add(NewOrderManager.getInstance().getCoupons(mTenantId, mSiteId)
.subscribe(new Subscriber<DiscountCollection>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
progressBar.setVisibility(GONE);
}
@Override
public void onNext(DiscountCollection discountCollection) {
progressBar.setVisibility(GONE);
List<Discount> discountList = discountCollection.getItems();
List<String> couponCodeList = new ArrayList<String>();
for (Discount discount : discountList) {
if (discount.getConditions().getCouponCode() != null) {
couponCodeList.add(discount.getConditions().getCouponCode());
}
}
spinnerAdapter.setData(couponCodeList);
spinnerAdapter.notifyDataSetChanged();
}
}));
}
return false;
}
});
mSpinner.post(new Runnable() {
@Override
public void run() {
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
if (position == 0)
return;
final String couponSelected = (String) adapterView.getItemAtPosition(position);
progressBar.setVisibility(View.VISIBLE);
mCompositeSubscription.add(NewOrderManager.getInstance().getApplyCouponObservable(mTenantId, mSiteId, order.getId(), couponSelected)
.subscribe(new Subscriber<Order>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onNext(Order order) {
progressBar.setVisibility(View.GONE);
if (order.getInvalidCoupons().size() > 0) {
for (InvalidCoupon invalidCoupon : order.getInvalidCoupons()) {
if (invalidCoupon.getCouponCode().equals(couponSelected)) {
Toast.makeText(getContext(), invalidCoupon.getReason(), Toast.LENGTH_LONG).show();
mSpinner.setSelection(0);
return;
}
}
}
mOrderUpdateListener.updateOrder(order);
}
}));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
});
}
}
class SpinnerAdapter extends BaseAdapter {
private List<String> mData;
public SpinnerAdapter() {
mData = new ArrayList<>();
mData.add(getResources().getString(R.string.select_coupons));
}
public void setData(List<String> data) {
mData.clear();
mData.add(getResources().getString(R.string.select_coupons));
mData.addAll(data);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.orderfulfillment_spinner_item, parent, false);
}
TextView mTextView = (TextView) convertView.findViewById(R.id.order_fulfillment);
String couponCode = getItem(position);
mTextView.setText(couponCode);
return convertView;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int i) {
return mData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) View.inflate(parent.getContext(), R.layout.orderfulfillment_dropdown_resource, null);
textView.setText(getResources().getString(R.string.select_coupons));
return textView;
}
}
}