package sketch.jackyoung.com.scalesketchpaddemo.workbox;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import sketch.jackyoung.com.scalesketchpaddemo.R;

/**
 * Created by JackYoung on 2017/8/12.
 */
public class PenStrockAndColorSelect extends RelativeLayout {
    private static final int CANCEL_BUTTON_ID = 0x0020;
    public static final int COLOR_TYPE = 0x0021;
    public static final int STROCK_TYPE = 0x0022;

    public void setCURRENT_TYPE(int CURRENT_TYPE) {
        this.CURRENT_TYPE = CURRENT_TYPE;
    }

    private int CURRENT_TYPE = COLOR_TYPE;

    private int m_penPosition = 0;
    private int m_penPositionTemp = 0;
    private ColorSelectorCallback m_callback = null;

    private OnClickListener m_clickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {

                case CANCEL_BUTTON_ID:
                    PenStrockAndColorSelect.this.setVisibility(View.GONE);
                    m_penPosition = m_penPositionTemp;
                    if (null != m_callback) {
                        m_callback.onColorSelectCancel(PenStrockAndColorSelect.this);
                    }
                    break;

                default:
                    Object tag = v.getTag();
                    if (null != tag && tag instanceof Integer) {
                        m_penPosition = ((Integer) tag).intValue();
                    }

                    if (null != m_callback) {
                        m_callback.onColorSelectChange(PenStrockAndColorSelect.this);
                    }
                    break;
            }
        }
    };

    public PenStrockAndColorSelect(Context context) {
        this(context, null);
    }

    public PenStrockAndColorSelect(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public PenStrockAndColorSelect(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);


        initialize(context);
    }

    public void initialize(Context context) {
        this.setBackgroundColor(Color.WHITE);

        final int width = 90;
        final int height = 90;
        final int margin = 13;
        final int length = PointPath.mPathColors.length;
        int left = 10;

        for (int i = 0; i < length; ++i) {
            int color = PointPath.mPathColors[i];

            ImageView imgBtn = new ImageView(context);
            if (CURRENT_TYPE == STROCK_TYPE) {
                Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
                Canvas canvas = new Canvas(bitmap);
                Paint paint = new Paint();
                paint.setColor(Color.RED);
                paint.setStrokeWidth(PointPath.mPenStrock[i]);
                canvas.drawLine(0, height, width, 0, paint);
                imgBtn.setImageBitmap(bitmap);
                imgBtn.setBackgroundColor(Color.WHITE);

            } else {
                imgBtn.setBackgroundColor(color);

            }


            imgBtn.setOnClickListener(m_clickListener);
            imgBtn.setTag(i);

            LayoutParams params = new LayoutParams(width, height);
            params.setMargins(left, 30, 0, 0);
            params.addRule(Gravity.CENTER_VERTICAL);
            left += (margin + width);

            this.addView(imgBtn, params);
        }


        // Cancel button.
        Button btnCancel = new Button(context);
        btnCancel.setText("cancel");
        btnCancel.setId(CANCEL_BUTTON_ID);
        btnCancel.setTextSize(8);
        btnCancel.setOnClickListener(m_clickListener);
        LayoutParams btnCancelparams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, height);
        btnCancelparams.addRule(Gravity.CENTER);
        left += 10;
        btnCancelparams.setMargins(left, 30, 0, 0);
        this.addView(btnCancel, btnCancelparams);
    }

    public boolean onTouchEvent(MotionEvent event) {
        return true;
    }

    public void setCallback(ColorSelectorCallback callback) {
        m_callback = callback;
    }

    public int getPenPosition() {
        return m_penPosition;
    }

    public int getCURRENT_TYPE() {
        return CURRENT_TYPE;
    }

    public interface ColorSelectorCallback {
        public void onColorSelectCancel(PenStrockAndColorSelect sender);

        public void onColorSelectChange(PenStrockAndColorSelect sender);
    }


    public void setStrockORColor(int type) throws Exception {
        try {
            CURRENT_TYPE = type;
            postInvalidateDelayed(200);
        } catch (Exception e) {
            throw new Exception("need COLOR_TYPE or STROCK_TYPE");
        }
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        initialize(getContext());
    }
}