package com.common.commonlib.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;

import androidx.annotation.Nullable;

import com.common.commonlib.R;

/**
 * mic自定义View
 *
 * @author miracle
 * @since 2021/8/2
 */
public class MikeView extends View {
    //进度条格数
    private final int COUNT = 16;
    //宽、高、间隔、进度条居上距离
    private int mVoiceRectW = 1;
    private int mVoiceRectH = 10;
    private int mInterval = 3;
    private int mVoiceRectMarginTop = 83;
    //mic 文字 进度条 背景
    private Paint mImagePaint;
    private Paint mVoiceRectPaint;
    private Paint mBackgroundPaint;

    private Bitmap mVoiceRecording;//mic图片

    //屏幕宽高
    private int SCREEN_HEIGHT = 0;
    private int SCREEN_WIDTH = 0;

    private int mVoiceRectStart = 0, mDescriptionW = 0;//进度条开始左边位置、文字长度

    private int mCurrentPosition = 0;//当前位置
    private int mBackgroundRound = 3;//背景圆角

    private int mImageW = 42;//新mic图片宽
    private int mImageH = 42;//新mic图片高

    private int mMarginTop = 25, mTextMarginBottom = 11;//mic图片居上距离 文字居底部距离

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

    public MikeView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MikeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        DisplayMetrics dm = getResources().getDisplayMetrics();

        mImageW = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mImageW, dm);
        mImageH = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mImageH, dm);
        mMarginTop = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mMarginTop, dm);
        mTextMarginBottom = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mTextMarginBottom, dm);
        mVoiceRectW = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mVoiceRectW, dm);
        mVoiceRectH = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mVoiceRectH, dm);
        mInterval = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mInterval, dm);
        mVoiceRectMarginTop = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mVoiceRectMarginTop, dm);
        mBackgroundRound = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mBackgroundRound, dm);

        mImagePaint = new Paint();

        mVoiceRectPaint = new Paint();
        mVoiceRectPaint.setColor(Color.WHITE);

        mBackgroundPaint = new Paint();
        mBackgroundPaint.setColor(Color.TRANSPARENT);//背景颜色

        mVoiceRecording = BitmapFactory.decodeResource(getResources(), R.drawable.mike);
        mVoiceRecording = scaleBitmap(mVoiceRecording, mImageW, mImageH);

        setWillNotDraw(false);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (SCREEN_HEIGHT == 0 || SCREEN_WIDTH == 0) {
            SCREEN_HEIGHT = getHeight();
            SCREEN_WIDTH = getWidth();
        }
        if (mVoiceRectStart <= 0) {
            mVoiceRectStart = SCREEN_WIDTH / 2 - (COUNT * mVoiceRectW + (COUNT - 1) * mInterval) / 2;
        }

        canvas.drawRoundRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, mBackgroundRound, mBackgroundRound, mBackgroundPaint);//画灰色背景和圆角

        canvas.drawBitmap(mVoiceRecording, SCREEN_WIDTH / 2 - mVoiceRecording.getWidth() / 2, mMarginTop, mImagePaint);//画mic图片

        //画前几个是白色 后几个是灰色
        for (int i = 0; i < COUNT; i++) {
            if (i < mCurrentPosition) {
                mVoiceRectPaint.setColor(Color.WHITE);
            } else {
                mVoiceRectPaint.setColor(Color.parseColor("#73FFFFFF"));
            }
            canvas.drawRect(i * mVoiceRectW + (i * mInterval) + mVoiceRectStart, mVoiceRectMarginTop, i * mVoiceRectW + (i * mInterval) + mVoiceRectW + mVoiceRectStart, mVoiceRectMarginTop + mVoiceRectH, mVoiceRectPaint);
        }
    }

    public void setIndex(int p) {
        if (p < 0) {
            p = 0;
        }
        if (p >= COUNT) {
            p = COUNT - 1;
        }

        mCurrentPosition = p;
        postInvalidate();
    }

    public void setIndex(double percent) {
        int p = (int) (COUNT * percent);
        setIndex(p);
    }

    /**
     * bitmap 缩放
     *
     * @param origin    源
     * @param newWidth  宽
     * @param newHeight 高
     * @return bitmap
     */
    private Bitmap scaleBitmap(Bitmap origin, int newWidth, int newHeight) {
        if (origin == null) {
            return null;
        }
        int height = origin.getHeight();
        int width = origin.getWidth();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);// 使用后乘
        Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
        if (!origin.isRecycled()) {
            origin.recycle();
        }
        return newBM;
    }
}
