package me.shouheng.omnilist.adapter;

import android.content.Context;
import android.support.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.Collections;
import java.util.List;

import me.shouheng.omnilist.R;
import me.shouheng.omnilist.model.Category;
import me.shouheng.omnilist.utils.ColorUtils;
import me.shouheng.omnilist.widget.CircleImageView;
import me.shouheng.omnilist.widget.tools.IItemTouchHelperAdapter;


/**
 * Created by Wang Shouheng on 2018/2/14. */
public class CategoriesAdapter extends BaseQuickAdapter<Category, BaseViewHolder> implements
        IItemTouchHelperAdapter {

    private Category mJustDeletedToDoItem;
    private int mIndexOfDeletedToDoItem;
    private boolean isPositionChanged;

    private Context context;
    private boolean isDarkTheme;
    private int accentColor;

    private OnItemRemovedListener onItemRemovedListener;

    public CategoriesAdapter(Context context, @Nullable List<Category> data) {
        super(R.layout.item_category, data);

        this.context = context;

        this.accentColor = ColorUtils.accentColor();
        this.isDarkTheme = ColorUtils.isDarkTheme();
    }

    @Override
    protected void convert(BaseViewHolder helper, Category category) {
        final int categoryColor = category.getColor();

        if (isDarkTheme) helper.itemView.setBackgroundResource(R.color.dark_theme_background);

        helper.setText(R.id.tv_title, category.getName());
        helper.setText(R.id.tv_sub_title, context.getResources().getQuantityString(R.plurals.assignments_number, category.getCount(), category.getCount()));

        ((CircleImageView) helper.getView(R.id.iv_folder_background)).setFillingCircleColor(categoryColor);

        helper.addOnClickListener(R.id.iv_more);
        helper.setImageResource(R.id.iv_folder_portrait, category.getPortrait().iconRes);
    }

    @Override
    public void onItemMoved(int fromPosition, int toPosition) {
        isPositionChanged = true;
        if(fromPosition < toPosition){
            for(int i=fromPosition; i<toPosition; i++){
                Collections.swap(getData(), i, i+1);
            }
        } else{
            for(int i=fromPosition; i > toPosition; i--){
                Collections.swap(getData(), i, i-1);
            }
        }
        notifyItemMoved(fromPosition, toPosition);
    }

    @Override
    public void onItemRemoved(int position, int direction) {
        isPositionChanged = true;
        mJustDeletedToDoItem = getData().remove(position);
        mIndexOfDeletedToDoItem = position;
        notifyItemRemoved(position);
        if (onItemRemovedListener != null){
            onItemRemovedListener.onItemRemoved(mJustDeletedToDoItem, mIndexOfDeletedToDoItem);
        }
    }

    @Override
    public void afterMoved() {
        notifyDataSetChanged();
    }

    public boolean isPositionChanged() {
        return isPositionChanged;
    }

    public void setOnItemRemovedListener(OnItemRemovedListener onItemRemovedListener) {
        this.onItemRemovedListener = onItemRemovedListener;
    }

    public interface OnItemRemovedListener {
        void onItemRemoved(Category item, int position);
    }
}