package com.daya.accompanysdk.widget;

import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.airbnb.lottie.LottieAnimationView;
import com.cooleshow.base.utils.SizeUtils;
import com.cooleshow.base.utils.helper.QMUIDeviceHelper;
import com.daya.accompanysdk.R;
import com.daya.orchestra.accompany.widget.BaseDelayCheckView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;

/**
 * Author by pq, Date on 2024/10/14.
 */
public class CustomDelayCheckView extends BaseDelayCheckView {

    private ImageView mIvBack;
    private View mViewRetry;
    private LottieAnimationView mViewAnim1;
    private LottieAnimationView mViewAnim2;
    private ImageView mIvBall;
    private ImageView mIvCenter;
    private ImageView mIvTip;
    private LinearLayout mLlEarphoneTip;
    private ObjectAnimator ballAnimator;
    private ObjectAnimator mCenterAnim;
    private ConstraintLayout mCsRoot;

    public CustomDelayCheckView(@NonNull Context context) {
        super(context);
    }

    public CustomDelayCheckView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

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

    @Override
    protected int getLayoutRes() {
        return R.layout.ac_custom_delay_check_layout;
    }

    @Override
    public void initView() {
        super.initView();
        mIvBack = findViewById(R.id.iv_close);
        mIvBall = findViewById(R.id.iv_ball);
        ImageView iv_ball2 = findViewById(R.id.iv_ball2);
        mViewAnim1 = findViewById(R.id.view_anim1);
        mViewAnim2 = findViewById(R.id.view_anim2);
        mIvTip = findViewById(R.id.iv_tip);
        mViewRetry = findViewById(R.id.view_retry);
        mIvCenter = findViewById(R.id.iv_center);
        mLlEarphoneTip = findViewById(R.id.ll_earphone_tip);
        mCsRoot = findViewById(R.id.cs_root);
        fitPad();
    }

    private void fitPad() {
        boolean isTablet = QMUIDeviceHelper.isTablet(getContext());
        ConstraintSet constraintSet =new ConstraintSet();
        constraintSet.clone(mCsRoot);
        constraintSet.connect(R.id.iv_center,ConstraintSet.TOP, R.id.iv_tip, ConstraintSet.BOTTOM);
        constraintSet.connect(R.id.iv_center,ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT);
        constraintSet.connect(R.id.iv_center,ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT);
        if(isTablet){
            constraintSet.connect(R.id.iv_center,ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM);
            constraintSet.setMargin(R.id.iv_tip,ConstraintSet.TOP, SizeUtils.dp2px(50));
        }
        constraintSet.applyTo(mCsRoot);
    }

    @Override
    public void initData() {
        super.initData();
        ballAnimator = ObjectAnimator.ofFloat(mIvBall, "rotation", 0f, 360f);
        ballAnimator.setDuration(8000);
        ballAnimator.setRepeatCount(ValueAnimator.INFINITE);
        ballAnimator.setInterpolator(new LinearInterpolator());
        ballAnimator.start();

        mCenterAnim = ObjectAnimator.ofFloat(mIvCenter, "translationY", 0f, 24f);
        mCenterAnim.setDuration(1000);
        mCenterAnim.setRepeatCount(ValueAnimator.INFINITE);
        mCenterAnim.setInterpolator(new LinearInterpolator());
        mCenterAnim.setRepeatMode(ValueAnimator.REVERSE);
        mCenterAnim.start();

        this.mLlEarphoneTip.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                CustomDelayCheckView.this.mLlEarphoneTip.setVisibility(View.GONE);
            }
        });
    }

    @Override
    public void showAnimStep(int step) {
        if (mViewRetry != null) {
            mViewRetry.setVisibility(step == CHECK_FAIL ? View.VISIBLE : View.GONE);
        }
        if (step != CHECK_COMPLETED) {
            if (step == CHECK_PREPARE) {
                resetAnim();
            }
            if (step == CHECK_FAIL_TIP_EARPHONE) {
                mLlEarphoneTip.setVisibility(View.VISIBLE);
                return;
            } else {
                mLlEarphoneTip.setVisibility(View.GONE);
            }
            int mainAnimRes = getMainAnimRes(step);
            mIvCenter.setImageResource(mainAnimRes);
            mIvTip.setImageResource(getTipImgRes(step));
        } else {
            handleCompletedAnim();
        }
    }

    private void handleCompletedAnim() {

    }

    private int getMainAnimRes(int step) {
        if (step == CHECK_PREPARE) {
            return R.drawable.ac_check_prepare;
        }
        if (step == CHECK_ING) {
            return R.drawable.ac_check_ing;
        }
        if (step == CHECK_SUCCESS) {
            return R.drawable.ac_check_success;
        }
        if (step == CHECK_FAIL) {
            return R.drawable.ac_check_fail;
        }
        return R.drawable.ac_check_prepare;
    }

    private void resetAnim() {

    }

    private int getTipImgRes(int step) {
        if (step == CHECK_PREPARE) {
            return R.drawable.ac_icon_delay_check_tip1;
        }
        if (step == CHECK_ING) {
            return R.drawable.ac_icon_delay_check_tip2;
        }
        if (step == CHECK_SUCCESS) {
            return R.drawable.ac_icon_delay_check_tip3;
        }
        if (step == CHECK_FAIL) {
            return R.drawable.ac_icon_delay_check_tip4;
        }
        return R.drawable.ac_icon_delay_check_tip1;
    }

    @Override
    public void setOnViewClickListener(OnClickListener onViewClickListener) {
        super.setOnViewClickListener(onViewClickListener);
        if (mIvBack != null) {
            mIvBack.setOnClickListener(onViewClickListener);
        }
        if (mViewRetry != null) {
            mViewRetry.setOnClickListener(onViewClickListener);
        }
    }

    @Override
    public void release() {
        super.release();
        if (mViewAnim1 != null) {
            mViewAnim1.cancelAnimation();
            mViewAnim1.clearAnimation();
        }

        if (mViewAnim2 != null) {
            mViewAnim2.cancelAnimation();
            mViewAnim2.clearAnimation();
        }
        if (mIvBall != null) {
            mIvBall.clearAnimation();
        }

        if (mIvCenter != null) {
            mIvCenter.clearAnimation();
        }
        if (ballAnimator != null) {
            ballAnimator.cancel();
            ballAnimator =null;
        }
        if (mCenterAnim != null) {
            mCenterAnim.cancel();
            mCenterAnim =null;
        }
    }
}