package br.com.liveo.searchview_materialdesign;

import android.databinding.DataBindingUtil;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Locale;

import br.com.liveo.searchview_materialdesign.databinding.ContentMainItemBinding;
import br.com.liveo.searchview_materialdesign.model.Company;

/**
 * Created by rudsonlima on 19/03/18.
 */

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {

    private ArrayList<Company> mCompanys;
    private ArrayList<Company> mSearchCompanys;

    public MainAdapter(ArrayList<Company> Companys) {
        this.mCompanys = Companys;
        this.mSearchCompanys = new ArrayList<>();
        this.mSearchCompanys.addAll(this.mCompanys);
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        ViewHolder(View itemView) {
            super(itemView);
        }

        ContentMainItemBinding getBinding() {
            return DataBindingUtil.getBinding(itemView);
        }
    }

    @NonNull
    @Override
    public MainAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),
                R.layout.content_main_item, parent, false).getRoot());
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Company company = mCompanys.get(holder.getAdapterPosition());

        holder.getBinding().setVariable(BR.company, company);
        holder.getBinding().executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return (mCompanys == null ? 0 : mCompanys.size());
    }

    private static String removeAccent(String text) {
        String result = Normalizer.normalize(text, Normalizer.Form.NFD);
        return result.replaceAll("[^\\p{ASCII}]", "");
    }

    void searchCompanyes(CharSequence charText) {

        charText = removeAccent((String) charText).toLowerCase(Locale.getDefault());

        mCompanys.clear();
        if (charText.length() == 0) {
            mCompanys.addAll(mSearchCompanys);
        } else {
            for (Company Company : mSearchCompanys) {
                String name = removeAccent(Company.getName());
                if (name.toLowerCase(Locale.getDefault()).contains(charText)) {
                    mCompanys.add(Company);
                }
            }
        }

        notifyDataSetChanged();
    }
}