// Copyright 2016 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package io.v.todos;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;

/**
 * @author alexfandrianto
 */
public class TaskRecyclerAdapter extends RecyclerView.Adapter<TaskViewHolder> {
    private ArrayList<Task> backup;
    private View.OnClickListener itemListener;
    private boolean showDone = true;

    private static final int RESOURCE_ID = R.layout.task_row;

    public TaskRecyclerAdapter(ArrayList<Task> backup, View.OnClickListener itemListener) {
        super();
        this.backup = backup;
        this.itemListener = itemListener;
    }

    @Override
    public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(RESOURCE_ID, parent, false);
        return new TaskViewHolder(view);
    }

    @Override
    public void onBindViewHolder(TaskViewHolder holder, int position) {
        Task task = backup.get(position);
        holder.bindTask(task, itemListener);
    }

    @Override
    public int getItemCount() {
        return showDone ? backup.size() : nonDoneSize();
    }

    private int nonDoneSize() {
        for (int i = 0; i < backup.size(); i++) {
            if (backup.get(i).getDone()) {
                return i;
            }
        }
        return backup.size();
    }

    public void setShowDone(boolean showDone) {
        this.showDone = showDone;
        this.notifyDataSetChanged();
    }
}