package com.mozu.mozuandroidinstoreassistant.app.product;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import com.crashlytics.android.Crashlytics;
import com.mozu.api.contracts.productadmin.LocationInventory;
import com.mozu.api.contracts.productadmin.LocationInventoryCollection;
import com.mozu.api.contracts.productruntime.Product;
import com.mozu.api.contracts.productruntime.VariationOption;
import com.mozu.api.contracts.productruntime.VariationSummary;
import com.mozu.mozuandroidinstoreassistant.app.R;
import com.mozu.mozuandroidinstoreassistant.app.product.adapter.ProdDetailLocationInventoryAdapter;
import com.mozu.mozuandroidinstoreassistant.app.product.loaders.InventoryRetriever;
import com.mozu.mozuandroidinstoreassistant.app.views.LoadingView;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import rx.Observable;
import rx.Observer;
import rx.Subscription;
import rx.android.observables.AndroidObservable;
import rx.schedulers.Schedulers;
import rx.subscriptions.Subscriptions;
public class ProductDetailInventoryFragment extends DialogFragment implements Observer<LocationInventoryCollection> {
@InjectView(R.id.inventory_list)
ListView mInventoryList;
@InjectView(R.id.inventory_loading)
LoadingView mProgress;
@InjectView(R.id.dialog_header)
LinearLayout mDialogLayout;
@InjectView(R.id.mainlayout)
LinearLayout mMainLayout;
@InjectView(R.id.product_variation_spinner)
Spinner mProductVariation;
@InjectView(R.id.product_variation_layout)
LinearLayout mProductVariationLayout;
private Product mProduct;
private int mTenantId;
private int mSiteId;
private List<LocationInventory> mInventory;
private String mVariatonProductCode;
private InventoryRetriever mInventoryRetriever;
private Subscription mSubscription = Subscriptions.empty();
private Observable<LocationInventoryCollection> mInventoryObservable;
public ProductDetailInventoryFragment() {
// Required empty public constructor
setRetainInstance(true);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.product_detail_inventory_fragment, null);
ButterKnife.inject(this, view);
if (mInventory != null) {
onCompleted();
}
if (mProduct.getVariations() != null && mProduct.getVariations().size() > 0) {
mProductVariationLayout.setVisibility(View.VISIBLE);
mVariatonProductCode = mProduct.getVariations().get(0).getProductCode();
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(getActivity(), R.layout.productinventory_spinner_item, R.id.product_option_name, mProduct.getVariations());
mProductVariation.setAdapter(spinnerAdapter);
mProductVariation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
mVariatonProductCode = ((VariationSummary) adapterView.getItemAtPosition(position)).getProductCode();
loadData();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
} else {
mProductVariationLayout.setVisibility(View.GONE);
mVariatonProductCode = mProduct.getProductCode();
}
setupForDialog();
loadData();
return view;
}
private void loadData() {
AndroidObservable.bindFragment(this, new InventoryRetriever().getInventoryData(mVariatonProductCode, mTenantId, mSiteId))
.subscribeOn(Schedulers.io())
.subscribe(this);
}
public void onPause() {
super.onPause();
mSubscription.unsubscribe();
}
@Override
public void onNext(LocationInventoryCollection inventoryCollection) {
mInventory = inventoryCollection.getItems();
if (mInventory.size() > 0) {
mProgress.success();
} else {
mProgress.setError(getString(R.string.no_inventory));
}
}
@Override
public void onCompleted() {
mInventoryList.setAdapter(new ProdDetailLocationInventoryAdapter(getActivity(), mInventory, mTenantId, mSiteId));
}
public void onError(Throwable error) {
mProgress.setError(getString(R.string.inventory_load_error));
Crashlytics.logException(error);
}
public void setProduct(Product product) {
mProduct = product;
}
public void setTenantId(int tenantId) {
mTenantId = tenantId;
}
public void setSiteId(int siteId) {
mSiteId = siteId;
}
private void setupForDialog() {
if (getShowsDialog()) {
int padding = (int) getResources().getDimension(R.dimen.inventory_dialog_padding);
mMainLayout.setPadding(padding, padding, padding, padding);
mDialogLayout.setVisibility(View.VISIBLE);
TextView productCode = (TextView) mDialogLayout.findViewById(R.id.productCode);
TextView productName = (TextView) mDialogLayout.findViewById(R.id.productName);
productCode.setText(mProduct.getProductCode());
productName.setText(mProduct.getContent().getProductName());
ImageView dismissView = (ImageView) mDialogLayout.findViewById(R.id.imageView_close);
dismissView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getDialog().dismiss();
}
});
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
class SpinnerAdapter extends ArrayAdapter<VariationSummary> {
public SpinnerAdapter(Context context, int res, int textViewResourceId, List<VariationSummary> objects) {
super(context, res, textViewResourceId, objects);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.productinventory_spinner_item, parent, false);
}
TextView mTextView = (TextView) convertView.findViewById(R.id.product_option_name);
VariationSummary variationSummary = getItem(position);
mTextView.setText(getDisplayText(variationSummary));
return convertView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) View.inflate(parent.getContext(), R.layout.product_inventory_dropdown, null);
textView.setText(getDisplayText(getItem(position)));
return textView;
}
private String getDisplayText(VariationSummary variationSummary) {
StringBuffer optionString = new StringBuffer();
optionString.append(variationSummary.getProductCode());
optionString.append(" ");
optionString.append(mProduct.getContent().getProductName());
optionString.append("(");
for (VariationOption option : variationSummary.getOptions()) {
optionString.append(option.getValue());
optionString.append(" ");
}
optionString.append(")");
return optionString.toString();
}
}
}