package com.github.tianma8023.smscode.app.rule;

import android.view.ContextMenu;
import android.view.View;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.github.tianma8023.smscode.R;
import com.github.tianma8023.smscode.adapter.OnCreateItemContextMenuListener;
import com.github.tianma8023.smscode.entity.SmsCodeRule;

import java.util.List;

public class RuleAdapter extends BaseQuickAdapter<SmsCodeRule, BaseViewHolder> {

    private OnCreateItemContextMenuListener mContextMenuListener;

    RuleAdapter(List<SmsCodeRule> ruleList) {
        super(R.layout.item_rule, ruleList);
    }

    @Override
    protected void convert(BaseViewHolder helper, SmsCodeRule item) {
        helper.setText(R.id.rule_company_text_view, item.getCompany())
                .setText(R.id.rule_keyword_text_view, item.getCodeKeyword())
                .setText(R.id.rule_regex_text_view, item.getCodeRegex());
    }

    public void setContextMenuListener(OnCreateItemContextMenuListener contextMenuListener) {
        mContextMenuListener = contextMenuListener;
    }

    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {
        super.onBindViewHolder(holder, position);

        final int pos = position;
        holder.itemView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                if (mContextMenuListener != null) {
                    mContextMenuListener.onCreateItemContextMenu(menu, v, menuInfo, pos);
                }
            }
        });
    }

    public void addRule(SmsCodeRule newRule) {
        if (!getData().contains(newRule)) {
            addData(newRule);
        }
    }

    public void addRule(List<SmsCodeRule> ruleList) {
        addData(ruleList);
    }

    public void addRule(int position, SmsCodeRule newRule) {
        if (!getData().contains(newRule)) {
            addData(position, newRule);
        }
    }

    public void updateAt(int position, SmsCodeRule updatedRule) {
        SmsCodeRule item = getItem(position);
        if (item != null) {
            item.copyFrom(updatedRule);
            notifyDataSetChanged();
        }
    }

    public void removeItemAt(int position) {
        remove(position);
    }

    public List<SmsCodeRule> getRuleList() {
        return getData();
    }

    public void setRules(List<SmsCodeRule> ruleList) {
        setNewData(ruleList);
    }
}