package com.bassbooster.soundeffects.equalizer.view.activity.edgelighting.customview

import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.bassbooster.equalizer.R

class ColoredBorderView(context: Context, attrs: AttributeSet?) : View(context, attrs) {
    private val borderPaint = Paint()
    private val borderRect = RectF()

    private val borderWidth = 10f // Độ rộng của đường viền
    private val padding = 30f // Padding bên trong view

    private val startColor = ContextCompat.getColor(context, R.color.end)
    private val endColor = ContextCompat.getColor(context, R.color.start)
    private val center = ContextCompat.getColor(context, R.color.center)

    private var currentColor = startColor // Màu sắc hiện tại của đường viền
    private val colorAnimator: ValueAnimator
    private val cornerRadius = 0f
    init {
        borderPaint.style = Paint.Style.STROKE
        borderPaint.strokeWidth = borderWidth
        borderPaint.pathEffect = DashPathEffect(floatArrayOf(30f, 30f), 0f) // Định dạng line nét đứt

        // Tính toán khu vực bao quanh đường viền với padding
        borderRect.set(
            padding,
            padding,
            width.toFloat() - padding,
            height.toFloat() - padding
        )

        // Khởi tạo và chạy animator để thay đổi màu sắc
        colorAnimator = ValueAnimator.ofObject(
            ArgbEvaluator(),
            startColor,
            center,
            endColor
        )
        colorAnimator.addUpdateListener { animator ->
            currentColor = animator.animatedValue as Int
            invalidate()
        }
        colorAnimator.interpolator = FastOutSlowInInterpolator()
        colorAnimator.duration = 1200 // Thời gian hoàn thành animation (ms)
        colorAnimator.repeatCount = ValueAnimator.INFINITE
        colorAnimator.start()


    }

    fun setColorAnimatorDuration(duration: Long) {
        colorAnimator.duration = duration
        invalidate()
    }

    @SuppressLint("DrawAllocation")
    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)

        // Vẽ đường viền với màu sắc hiện tại
        val width = width.toFloat()
        val height = height.toFloat()

        borderPaint.color = currentColor
//        canvas.drawPath(path, borderPaint)
        // Vẽ một đường viền dọc theo biên của view
        // Tính toán khu vực bao quanh đường viền với padding
        val borderRect = RectF(
            padding,
            padding,
            width - padding,
            height - padding
        )

        // Vẽ một đường viền dọc theo biên của view
//        Log.d("qqq", "onDraw: "+cornerRadius)
        val path = Path()
        canvas.drawRoundRect(
            borderRect,
            cornerRadius.toFloat(), // Bán kính đường viền
            cornerRadius.toFloat(), // Bán kính đường viền
            borderPaint
        )

    }
}
