package com.dreamliner.rvhelper.adapter;

import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import com.dreamliner.lib.rvhelper.R;
import com.dreamliner.rvhelper.interfaces.OnItemClickListener;
import com.dreamliner.rvhelper.interfaces.OnItemLongClickListener;
import com.dreamliner.rvhelper.viewholder.BaseBindViewHolder;

import androidx.annotation.LayoutRes;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;

/**
 * @author chenzj
 * @Title: BaseAdapter
 * @Description: 类的描述 -
 * @date 2016/6/12 09:05
 * @email [email protected]
 */
public class BaseMixtureDBAdapter<T> extends BaseDataDBAdapter<T> {

    private static final int NO_FOUND_TYPE = -1;

    private SparseIntArray mItemTypeToLayoutMap = new SparseIntArray();

    public BaseMixtureDBAdapter(SparseIntArray itemTypeToLayoutMap) {
        super();
        mItemTypeToLayoutMap = itemTypeToLayoutMap;
    }

    public BaseMixtureDBAdapter(OnItemClickListener<T> onItemClickListener, SparseIntArray itemTypeToLayoutMap) {
        super(onItemClickListener);
        mItemTypeToLayoutMap = itemTypeToLayoutMap;
    }

    public BaseMixtureDBAdapter(OnItemLongClickListener<T> onItemLongClickListener, SparseIntArray itemTypeToLayoutMap) {
        super(onItemLongClickListener);
        mItemTypeToLayoutMap = itemTypeToLayoutMap;
    }

    public BaseMixtureDBAdapter(OnItemClickListener<T> onItemClickListener, OnItemLongClickListener<T> onItemLongClickListener,
                                SparseIntArray itemTypeToLayoutMap) {
        super(onItemClickListener, onItemLongClickListener);
        mItemTypeToLayoutMap = itemTypeToLayoutMap;
    }

    @LayoutRes
    protected int getLayoutRes(int viewType) {
        if (mItemTypeToLayoutMap.get(viewType, NO_FOUND_TYPE) != NO_FOUND_TYPE) {
            return mItemTypeToLayoutMap.get(viewType);
        }
        return R.layout.item_databinding_null;
    }

    @Override
    public BaseBindViewHolder createCustomViewHolder(ViewGroup parent, int viewType) {
        ViewDataBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), getLayoutRes(viewType),
                parent, false);
        return new BaseBindViewHolder<ViewDataBinding, T>(viewDataBinding);
    }
}