package com.xyoye.player.commom.widgets;

import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xyoye.player.R;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by xyoye on 2019/5/6.
 */

public class DanmuBlockView extends RelativeLayout implements View.OnClickListener{
    private EditText blockEt;
    private LabelsView labelsView;
    private List<String> blockList;

    private DanmuBlockListener listener;

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

    @SuppressLint("ClickableViewAccessibility")
    public DanmuBlockView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View.inflate(context, R.layout.layout_danmu_block, this);

        blockList = new ArrayList<>();

        blockEt = findViewById(R.id.block_input_et);
        labelsView = findViewById(R.id.labels_view);

        findViewById(R.id.block_view_cancel_iv).setOnClickListener(this);
        findViewById(R.id.add_block_bt).setOnClickListener(this);
        findViewById(R.id.delete_block_bt).setOnClickListener(this);

        this.setOnTouchListener((v, event) -> true);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.block_view_cancel_iv){
            if (listener != null)
                listener.onCloseView();
        }else if (id == R.id.add_block_bt){
            String blockText = blockEt.getText().toString().trim();
            if (TextUtils.isEmpty(blockText)){
                Toast.makeText(getContext(), "屏蔽关键字不能为空", Toast.LENGTH_LONG).show();
            }else if (blockList.contains(blockText)){
                Toast.makeText(getContext(), "当前关键字已屏蔽", Toast.LENGTH_LONG).show();
            }else if (traverseBlock(blockText)){
                Toast.makeText(getContext(), "当前关键字已在屏蔽范围内", Toast.LENGTH_LONG).show();
            }else {
                Toast.makeText(getContext(), "添加屏蔽成功", Toast.LENGTH_LONG).show();
                blockEt.setText("");
                KeyboardUtils.hideSoftInput(blockEt);

                if (blockText.endsWith(";")){
                    blockText = blockText.substring(0, blockText.length() - 1);
                }
                if (blockText.startsWith(";")){
                    blockText = blockText.substring(1);
                }
                String[] blockData;
                if (listener != null){
                    if (blockText.contains(";")){
                        blockData = blockText.split(";");
                    }else {
                        blockData = new String[]{blockText};
                    }

                    //添加到显示界面
                    blockList.addAll(Arrays.asList(blockData));
                    labelsView.setLabels(blockList);
                    if (listener != null)
                        listener.addBlock(Arrays.asList(blockData));
                }

            }
        }else if (id == R.id.delete_block_bt){
            List<String> selectLabelList = labelsView.getSelectLabelDatas();
            if (selectLabelList.size() == 0){
                ToastUtils.showShort("未选中屏蔽数据");
                return;
            }
            for (String text : selectLabelList){
                blockList.remove(text);
            }
            labelsView.setLabels(blockList);
            if (listener != null){
                listener.removeBlock(selectLabelList);
            }
        }
    }

    private boolean traverseBlock(String blockText){
        boolean isContains = false;
        for (String text : blockList){
            if (text.contains(blockText)){
                isContains = true;
                break;
            }
        }
        return isContains;
    }

    public void setBlockList(List<String> blocks){
        blockList.clear();
        blockList.addAll(blocks);
        labelsView.setLabels(blockList);
    }

    public void setCallBack(DanmuBlockListener listener){
        this.listener = listener;
    }

    public List<String> getBlockList() {
        return blockList;
    }

    public interface DanmuBlockListener{
        void removeBlock(List<String> text);

        void addBlock(List<String> text);

        void onCloseView();
    }
}