package com.webkul.mobikul.mobikulstandalonepos.helper;

import android.databinding.BindingAdapter;
import android.databinding.InverseBindingAdapter;
import android.databinding.InverseBindingListener;
import android.databinding.InverseMethod;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.AppCompatSpinner;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.squareup.picasso.Picasso;
import com.webkul.mobikul.mobikulstandalonepos.R;
import com.webkul.mobikul.mobikulstandalonepos.constants.BundleConstants;

import static com.webkul.mobikul.mobikulstandalonepos.activity.BaseActivity.TAG;

public class DataBindingAdapters {

    @BindingAdapter("imageResource")
    public static void setImageResource(ImageView imageView, int resource) {
        imageView.setImageResource(resource);
    }

    @BindingAdapter(value = {"imageUrl", "placeholder", "sizeDevider"}, requireAll = false)
    public static void loadImage(ImageView view, String imageUrl, Drawable placeHolder, double sizeDevider) {
        if (imageUrl != null && imageUrl.isEmpty()) {
            imageUrl = null;
        }
        /*LOAD WITHOUT PLACE HOLDER*/
        if (imageUrl != null && !imageUrl.equalsIgnoreCase("")) {
            try {
                Glide.with(view.getContext())
                        .load(imageUrl)
//                    .error(R.drawable.ic_error)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .skipMemoryCache(true)
                        .dontAnimate()
                        .into(view);
            } catch (Exception e) {
                view.setImageResource(R.drawable.ic_error);
            }
        } else {
            view.setImageResource(R.drawable.ic_product_placeholder);
            Log.d("Placeholder Image", imageUrl + "---" + view);
        }
    }

    @BindingAdapter(value = {"selectedValue", "selectedValueAttrChanged"}, requireAll = false)
    public static void bindSpinnerData(AppCompatSpinner pAppCompatSpinner, String newSelectedValue, final InverseBindingListener newTextAttrChanged) {
        pAppCompatSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                newTextAttrChanged.onChange();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        if (newSelectedValue != null) {
            int pos = ((ArrayAdapter<String>) pAppCompatSpinner.getAdapter()).getPosition(newSelectedValue);
            pAppCompatSpinner.setSelection(pos, true);
        }
    }

    @InverseBindingAdapter(attribute = "selectedValue", event = "selectedValueAttrChanged")
    public static String captureSelectedValue(AppCompatSpinner pAppCompatSpinner) {
        return (String) pAppCompatSpinner.getSelectedItem();
    }

//
//    @InverseMethod("toString")
//    public static String toStringFormat(String string, String data) {
//        return String.format(string, data);
//    }
//
//    public static String toString(String data) {
//        return data;
//    }

//    public static PhoneNumberType toPhoneNumberType(int ordinal) {
//        return PhoneNumberType.values()[ordinal];
//    }

    @BindingAdapter({"emptyTextSubHeading"})
    public static void setEmptyTextSubHeading(TextView textview, BundleConstants.EmptyLayoutType pageType) {
        switch (pageType) {
            case CUSTOMER:
                textview.setText(textview.getContext().getString(R.string.no_customer_secondary));
                break;
            case PRODUCT:
                textview.setText(textview.getContext().getString(R.string.no_products_available_yet));
                break;
            case ORDER:
                textview.setText(textview.getContext().getString(R.string.shop_first_to_see_your_orders_here));
                break;
            case CART:
                textview.setText(textview.getContext().getString(R.string.add_products_to_your_cart_first));
                break;
            case HOLD:
                textview.setText(textview.getContext().getString(R.string.subtitle_hold_cart));
                break;
            case CATEGORY:
                textview.setText(textview.getContext().getString(R.string.you_do_not_have_any_category_yet));
                break;
            case PAYMENT:
                textview.setText(textview.getContext().getString(R.string.empty_subtitle_payment_methods));
                break;
            case CASHDRAWER:
                textview.setText(textview.getContext().getString(R.string.empty_subtitle_cash_drawer));
                break;
            case OPTIONS:
                textview.setText(textview.getContext().getString(R.string.you_do_not_have_any_option_yet));
                break;
            case TAX:
                textview.setText(textview.getContext().getString(R.string.you_do_not_have_any_taxes_yet));
                break;
            case LOW_STOCK:
                textview.setText(textview.getContext().getString(R.string.no_low_stock_subtitle));
                break;
//            case NOTIFICATION:
//                textview.setText(textview.getContext().getString(R.string.no_recent_notifications));
//                break;
//            default:
//                break;
        }
    }

    @BindingAdapter({"emptyTextHeading"})
    public static void setEmptyTextHeading(TextView textview, BundleConstants.EmptyLayoutType pageType) {
        switch (pageType) {
            case CUSTOMER:
                textview.setText(textview.getContext().getString(R.string.no_customer));
                break;
            case PRODUCT:
                textview.setText(textview.getContext().getString(R.string.no_products));
                break;
            case ORDER:
                textview.setText(textview.getContext().getString(R.string.no_order));
                break;
            case CART:
                textview.setText(textview.getContext().getString(R.string.your_bag_is_empty));
                break;
            case HOLD:
                textview.setText(textview.getContext().getString(R.string.empty_hold_cart));
                break;
            case CATEGORY:
                textview.setText(textview.getContext().getString(R.string.no_category));
                break;
            case PAYMENT:
                textview.setText(textview.getContext().getString(R.string.empty_payment_methods));
                break;
            case CASHDRAWER:
                textview.setText(textview.getContext().getString(R.string.empty_cash_drawer));
                break;
            case OPTIONS:
                textview.setText(textview.getContext().getString(R.string.no_options));
                break;
            case TAX:
                textview.setText(textview.getContext().getString(R.string.no_tax));
                break;
            case LOW_STOCK:
                textview.setText(textview.getContext().getString(R.string.no_low_stock));
                break;
//            case NOTIFICATION:
//                textview.setText(textview.getContext().getString(R.string.no_notification));
//                break;
//            default:
//                break;
        }
    }

    @BindingAdapter({"emptyIcon"})
    public static void setEmptyIcon(ImageView imageview, BundleConstants.EmptyLayoutType pageType) {
        switch (pageType) {
            case CUSTOMER:
                imageview.setImageResource(R.drawable.ic_customer_empty);
                break;
            case PRODUCT:
                imageview.setImageResource(R.drawable.ic_empty_product);
                break;
            case ORDER:
                imageview.setImageResource(R.drawable.ic_empty_orders);
                break;
            case CART:
                imageview.setImageResource(R.drawable.ic_empty_cart);
                break;
            case HOLD:
                imageview.setImageResource(R.drawable.ic_empty_hold_cart);
                break;
            case CATEGORY:
                imageview.setImageResource(R.drawable.ic_empty_category);
                break;
            case PAYMENT:
                imageview.setImageResource(R.drawable.ic_empty_payment);
                break;
            case CASHDRAWER:
                imageview.setImageResource(R.drawable.ic_empty_cash_drawer);
                break;
            case OPTIONS:
                imageview.setImageResource(R.drawable.ic_empty_options);
                break;
            case TAX:
                imageview.setImageResource(R.drawable.ic_empty_tax);
                break;
            case LOW_STOCK:
                imageview.setImageResource(R.drawable.ic_empty_low_stock);
                break;
//            case NOTIFICATION:
//                imageview.setImageResource(R.drawable.ic_vector_empty_notification);
//                break;
//            default:
//                break;
        }
    }
}