package org.mazhuang.guanggoo.ui.widget;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.view.Display;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;

import org.mazhuang.guanggoo.R;

import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.util.TypedValue.applyDimension;

/**
 * @author donghua.xdh
 */
public class MenuItemBadge {

    public static class Builder{

        public int textBackgroundColor; // TRANSPARENT = 0;
        public int textColor; // TRANSPARENT = 0;
        public int iconTintColor; // TRANSPARENT = 0;
        private Drawable iconDrawable;
        public Builder(){

        }
        public Builder textBackgroundColor(int textBackgroundColor){
            this.textBackgroundColor = textBackgroundColor;
            return this;
        }

        public Builder textColor(int textColor){
            this.textColor = textColor;
            return this;
        }

        public Builder iconTintColor(int iconTintColor){
            this.iconTintColor = iconTintColor;
            return this;
        }

        public Builder iconDrawable(Drawable iconDrawable){
            this.iconDrawable = iconDrawable;
            return this;
        }

    }

//    public static void update(final MenuItem menu, int badgeCount) {
//        update(null,menu, null, String.valueOf(formatNumber(badgeCount,true)));
//    }

    public static void update(final Activity activity, final MenuItem menu, MenuItemBadge.Builder builder) {
        update(activity, menu, builder, null);

    }

    public static void update(final Activity activity, final MenuItem menu, MenuItemBadge.Builder builder, final ActionItemBadgeListener listener) {
        if (menu == null) {
            return;
        }
        FrameLayout badge;
        MaterialBadgeTextView badgeTextView;
        ImageView imageView;

        badge = (FrameLayout) menu.getActionView();

        badgeTextView = (MaterialBadgeTextView) badge.findViewById(R.id.menu_badge);
        imageView = (ImageView) badge.findViewById(R.id.menu_badge_icon);

        //Display icon in ImageView
        if(imageView != null && builder != null){
            if (builder.iconDrawable !=null) {
                imageView.setImageDrawable(builder.iconDrawable);
            }

            if (  builder.iconTintColor != Color.TRANSPARENT) {
                imageView.setColorFilter(builder.iconTintColor);
            }
        }

        if (badgeTextView != null && builder != null && builder.textBackgroundColor != Color.TRANSPARENT) {
            badgeTextView.setBackgroundColor(builder.textBackgroundColor);
        }

        if (badgeTextView != null && builder != null && builder.textColor != Color.TRANSPARENT) {
            badgeTextView.setTextColor(builder.textColor);
        }


        //Bind onOptionsItemSelected to the activity
        if (activity != null) {
            badge.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean consumed = false;
                    if (listener != null) {
                        consumed = listener.onOptionsItemSelected(menu);
                    }
                    if (!consumed) {
                        activity.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, menu);
                    }
                }
            });

            badge.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    Display display = activity.getWindowManager().getDefaultDisplay();
                    Point size = new Point();
                    display.getSize(size);
                    int width = size.x;
                    Toast toast = Toast.makeText(activity, menu.getTitle(), Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.TOP, width / 5, convertDpToPx(activity, 48));
                    toast.show();
                    return true;
                }
            });
        }

        menu.setVisible(true);
    }

    public static MaterialBadgeTextView getBadgeTextView(MenuItem menu) {
        if (menu == null) {
            return null;
        }
        FrameLayout badge = (FrameLayout) menu.getActionView();
        MaterialBadgeTextView badgeView = (MaterialBadgeTextView) badge.findViewById(R.id.menu_badge);
        return badgeView;
    }

    /**
     * hide the given menu item
     *
     * @param menu
     */
    public static void hide(MenuItem menu) {
        menu.setVisible(false);
    }


    public interface ActionItemBadgeListener {
        boolean onOptionsItemSelected(MenuItem menu);
    }

    public static int convertDpToPx(Context context, float dp) {
        return (int) applyDimension(COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }

    public static void setBackgroundCompat(View v, Drawable d) {
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
            v.setBackgroundDrawable(d);
        } else {
            v.setBackground(d);
        }
    }

    public static String formatNumber(int value,boolean limitLength) {
        if (value < 0) {
            return "-" + formatNumber(-value, limitLength);
        } else if (value < 100) {
            return Long.toString(value);
        } else {
            return "99+";
        }

    }
}