/*
 * Copyright 2016-2019 Juliane Lehmann <[email protected]>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package com.lambdasoup.appbarsyncedfabSample;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.Objects;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SortedList;
import androidx.recyclerview.widget.SortedListAdapterCallback;

/**
 * Adapter holding Integer items for demo purposes.
 */
class ItemsAdapter extends RecyclerView.Adapter<ItemsAdapter.ViewHolder> {
    private final SortedList<Long> dataset;
    private long currentMaxItem = 0;
    private final OnItemClickListener onItemClickListener;

    ItemsAdapter(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
        dataset = new SortedList<>(Long.class, new SortedListAdapterCallback<Long>(this) { // yes, we're leaking half-constructed this. Currently, it's fine.
            @Override
            public int compare(Long left, Long right) {
                return Long.compare(left, right);
            }

            @Override
            public boolean areContentsTheSame(Long oldItem, Long newItem) {
                return Objects.equals(oldItem, newItem);
            }

            @Override
            public boolean areItemsTheSame(Long item1, Long item2) {
                return Objects.equals(item1, item2);
            }
        });
        setHasStableIds(true);
    }

    void addItem() {
        dataset.add(currentMaxItem);
        currentMaxItem++;
    }

    void removeItem(Long item) {
        dataset.remove(item);
    }

    @Override
    public long getItemId(int position) {
        if (position >= 0 && position < dataset.size()) {
            return dataset.get(position);
        }
        return RecyclerView.NO_ID;
    }

    @Override
    public int getItemCount() {
        return dataset.size();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bindItem(dataset.get(position));
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        ViewHolder(View itemView) {
            super(itemView);
        }

        void bindItem(final Long item) {
            TextView textView = itemView.findViewById(android.R.id.text1);
            textView.setText(textView.getContext().getString(R.string.item_text, item));

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClick(item);
                    }
                }
            });
        }
    }

    public interface OnItemClickListener {
        void onItemClick(Long item);
    }
}