package com.ydl.confide.home.widget;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;

import com.yidianling.common.tools.RxImageTool;
import com.ydl.confide.R;

public class ConfidePlayerFloatView extends FrameLayout {
    private float mTouchStartX;
    private float mTouchStartY;
    private float x;
    private float y;

    private ImageView playState;
    private ImageView playClose;
    private ImageView playHead;
    private View dividerLine;
    boolean mBoolean;

    private int mTouchSlop;

    private boolean isFmPlay;

    private boolean isClick;
    private boolean isMove;

    private WindowManager wm;
    private int dp3 = 0;

    //此wmParams为获取的全局变量,用以保存悬浮窗口的属性
    public WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();

    public ConfidePlayerFloatView(Context context) {
        super(context);
        init(context);
    }

    @SuppressLint("ClickableViewAccessibility")
    private void init(Context context) {
        wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
        dp3= RxImageTool.dip2px(3f);
        mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop() + 5;
        View view = inflate(context, R.layout.confide_playing_float_btn, this);
        playHead = view.findViewById(R.id.play_head);
        playState = view.findViewById(R.id.play_state);
        playClose = findViewById(R.id.play_close);
        dividerLine = findViewById(R.id.hz_divider_line);
//        GlideApp.with(context)
//                .load(R.drawable.)
//                .circleCrop()
//                .into(playHead);

        playHead.setOnTouchListener((v, event) -> {
            x = event.getRawX();
            y = event.getRawY() - 25;
            Log.i("currP", "currX" + x + "====currY" + y);
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //获取相对View的坐标,即以此View左上角为原点
                    mTouchStartX = event.getX();
                    mTouchStartY = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    Log.i("TAG", "currX" + event.getX() + "====currY" + event.getY());
                    if (Math.abs(event.getX() - mTouchStartX) > mTouchSlop ||
                            Math.abs((event.getY() - mTouchStartY)) > mTouchSlop) {
                        Log.i("TAG", "is move");
                        updateViewPosition();
                        isMove = true;
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if (Math.abs(event.getX() - mTouchStartX) > mTouchSlop ||
                            Math.abs((event.getY() - mTouchStartY)) > mTouchSlop || isMove) {
                        Log.i("TAG", "is move");
                        updateViewPosition();
                    } else {
                        if (!isMove) {
//                            if (PhoneCallIn.INSTANCE.isFmPlaying()) {
//                                //FM播放页
//                                context.startActivity(PhoneCallIn.INSTANCE.fmDetailIntent((Activity) context, PhoneCallIn.INSTANCE.getFmId()));
//                            } else if (PhoneCallIn.INSTANCE.isCoursePlaying()) {
//                                //课程播放页
//                                PhoneCallIn.INSTANCE.startCoursePlayPage((Activity) context);
//
//                            }
                        }
                        Log.i("TAG", "is click");
                    }
                    isClick = false;
                    isMove = false;
                    mTouchStartX = mTouchStartY = 0;
                    break;
            }
            return true;
        });

        playClose.setOnTouchListener((v, event) -> {
            x = event.getRawX();
            y = event.getRawY() - 25;
            Log.i("currP", "currX" + x + "====currY" + y);
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //获取相对View的坐标,即以此View左上角为原点
                    mTouchStartX = event.getX();
                    mTouchStartY = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    Log.i("TAG", "currX" + event.getX() + "====currY" + event.getY());
                    if (Math.abs(event.getX() - mTouchStartX) > mTouchSlop ||
                            Math.abs((event.getY() - mTouchStartY)) > mTouchSlop) {
                        Log.i("TAG", "is move");
                        updateViewPosition();
                        isMove = true;
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if (Math.abs(event.getX() - mTouchStartX) > mTouchSlop ||
                            Math.abs((event.getY() - mTouchStartY)) > mTouchSlop || isMove) {
                        Log.i("TAG", "is move");
                        updateViewPosition();
                    } else {
                        if (!isMove) {
                            ConfidePlayerFloatView.this.setVisibility(GONE);
                        }
                        Log.i("TAG", "is click");
                    }
                    isClick = false;
                    isMove = false;
                    mTouchStartX = mTouchStartY = 0;
                    break;
            }
            return true;
        });

        playState.setOnTouchListener((v, event) -> {
            x = event.getRawX();
            y = event.getRawY() - 25;
            Log.i("currP", "currX" + x + "====currY" + y);
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //获取相对View的坐标,即以此View左上角为原点
                    mTouchStartX = event.getX();
                    mTouchStartY = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    Log.i("TAG", "currX" + event.getX() + "====currY" + event.getY());
                    if (Math.abs(event.getX() - mTouchStartX) > mTouchSlop ||
                            Math.abs((event.getY() - mTouchStartY)) > mTouchSlop) {
                        Log.i("TAG", "is move");
                        updateViewPosition();
                        isMove = true;
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if (Math.abs(event.getX() - mTouchStartX) > mTouchSlop ||
                            Math.abs((event.getY() - mTouchStartY)) > mTouchSlop || isMove) {
                        Log.i("TAG", "is move");
                        updateViewPosition();
                    } else {
                        if (!isMove) {
                            if (isFmPlay) {
                                playState.setImageResource(R.drawable.confide_play_stop);
                                playState.setPadding(dp3,dp3,dp3,dp3);
                                playClose.setVisibility(VISIBLE);
                                dividerLine.setVisibility(VISIBLE);
                                if (null != mPlayCallBack){
                                    mPlayCallBack.click(false);
                                }
                            }  else {
                                playState.setImageResource(R.drawable.confide_play_pause);
                                playState.setPadding(dp3,dp3,dp3,dp3);
                                playClose.setVisibility(GONE);
                                dividerLine.setVisibility(GONE);
                                if (null != mPlayCallBack){
                                    mPlayCallBack.click(true);
                                }
                            }
                        }
                        Log.i("TAG", "is click");
                    }
                    isClick = false;
                    isMove = false;
                    mTouchStartX = mTouchStartY = 0;
                    break;
            }
            return true;
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //获取相对屏幕的坐标,即以屏幕左上角为原点
        x = event.getRawX();
        y = event.getRawY() - 25;
        Log.i("currP", "currX" + x + "====currY" + y);
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //获取相对View的坐标,即以此View左上角为原点
                mTouchStartX = event.getX();
                mTouchStartY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                updateViewPosition();
                break;
            case MotionEvent.ACTION_UP:
                updateViewPosition();
                mTouchStartX = mTouchStartY = 0;
                break;
        }
        return true;
    }

    private void updateViewPosition() {
        //更新浮动窗口位置参数
        wmParams.x = (int) (x - mTouchStartX);
        wmParams.y = (int) (y - mTouchStartY);
        wm.updateViewLayout(this, wmParams);
    }

    public void updatePlayState(Boolean isPlaying) {
        this.isFmPlay = isPlaying;
        if (isPlaying) {
            playState.setImageResource(R.drawable.confide_play_pause);
            playState.setPadding(dp3,dp3,dp3,dp3);
            playClose.setVisibility(GONE);
            dividerLine.setVisibility(VISIBLE);
        } else {
            playState.setImageResource(R.drawable.confide_play_stop);
            playState.setPadding(dp3,dp3,dp3,dp3);
            playClose.setVisibility(VISIBLE);
        }
    }
    private PlayCallBack mPlayCallBack;

    public void setPlayCallBack(PlayCallBack mPlayCallBack){
        this.mPlayCallBack = mPlayCallBack;
    }

    public interface PlayCallBack{
        //通知界面是暂停 还是播放 以此来刷新 updatePlayState方法的播放状态
        //MyPlayer类中的 isPlaying状态不好用 所以用这种方式更新
        void click(boolean isPlay);
    }
}