package jx.ym.fastedit;

import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.PopupWindow;
import android.widget.TextView;

public class EditBar extends PopupWindow implements View.OnClickListener {
    Context context;
    FastEdit fastEdit;
    View contentView;
    private TextView mBtnSelect;
    private TextView mBtnUndo;
    private TextView mBtnRedo;
    private TextView mBtnPaste;
    Paint paint;

    public EditBar(FastEdit fastEdit) {
        super(fastEdit.getContext());
        this.fastEdit = fastEdit;
        this.context = fastEdit.getContext();
        contentView = LayoutInflater.from(context).inflate(R.layout.fe_layout_edit, null);
        setContentView(contentView);
        contentView.measure(fastEdit.getWidth(), fastEdit.getHeight());
        setWidth(contentView.getMeasuredWidth());
        setHeight(contentView.getMeasuredHeight());
        initView();
        setOutsideTouchable(true);
        paint = new Paint();
        setBackgroundDrawable(null);
        contentView.setBackgroundDrawable(new Drawable() {
            @Override
            public void draw(Canvas canvas) {
                int shadowWidth = contentView.getPaddingTop();
                paint.setColor(0x33000000);
                paint.setMaskFilter(new BlurMaskFilter(shadowWidth, BlurMaskFilter.Blur.OUTER));
                canvas.drawRoundRect(shadowWidth,
                        shadowWidth,
                        getWidth() - shadowWidth,
                        getHeight() - shadowWidth,
                        shadowWidth, shadowWidth,
                        paint);
                paint.reset();
                paint.setColor(Color.WHITE);
                canvas.drawRoundRect(shadowWidth,
                        shadowWidth,
                        getWidth() - shadowWidth,
                        getHeight() - shadowWidth,
                        shadowWidth, shadowWidth,
                        paint);
            }

            @Override
            public void setAlpha(int alpha) {

            }

            @Override
            public void setColorFilter(ColorFilter colorFilter) {

            }


            @Override
            public int getOpacity() {
                return 0;
            }
        });

    }


    public void initView() {
        mBtnSelect = (TextView) contentView.findViewById(R.id.btn_select);
        mBtnSelect.setOnClickListener(this);
        mBtnUndo = (TextView) contentView.findViewById(R.id.btn_undo);
        mBtnUndo.setOnClickListener(this);
        mBtnRedo = (TextView) contentView.findViewById(R.id.btn_redo);
        mBtnRedo.setOnClickListener(this);
        mBtnPaste = (TextView) contentView.findViewById(R.id.btn_paste);
        mBtnPaste.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int i = v.getId();
        dismiss();
        if (i == R.id.btn_select) {
            fastEdit.select();
        } else if (i == R.id.btn_undo) {
            fastEdit.undo();
            fastEdit.showEditBar();
        } else if (i == R.id.btn_redo) {
            fastEdit.redo();
            fastEdit.showEditBar();
        } else if (i == R.id.btn_paste) {
            fastEdit.paste();
            fastEdit.showEditBar();
        }
    }

    @Override
    public void showAtLocation(View parent, int gravity, int x, int y) {
        super.showAtLocation(parent, gravity, x, y);
    }

    public void updateUndoRedoState() {
        if (fastEdit.canUndo()) {
            mBtnUndo.setEnabled(true);
            mBtnUndo.setTextColor(Color.BLACK);
        } else {
            mBtnUndo.setEnabled(false);
            mBtnUndo.setTextColor(Color.GRAY);
        }


        if (fastEdit.canRedo()) {
            mBtnRedo.setEnabled(true);
            mBtnRedo.setTextColor(Color.BLACK);
        } else {
            mBtnRedo.setEnabled(false);
            mBtnRedo.setTextColor(Color.GRAY);
        }
    }
}