package com.powerpoint45.dtube;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.github.curioustechizen.ago.RelativeTimeTextView;
import com.squareup.picasso.Picasso;

/**
 * Created by michael on 12/11/17.
 */

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

    private VideoArrayList videos;
    Activity c;
    View.OnClickListener clickListener;

    ChannelAdapter(VideoArrayList list, Activity activity){
        this.videos = list;
        c = activity;
        setHasStableIds(true);
        clickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (c instanceof ChannelActivity)
                    ((ChannelActivity)c).onItemClick((Integer) ((ViewHolder) v.getTag()).titleView.getTag());
                else if (c instanceof SearchActivity)
                    ((SearchActivity)c).onItemClick((Integer) ((ViewHolder) v.getTag()).titleView.getTag());
            }
        };
    }

    public void setVideos(VideoArrayList videos){
        this.videos = videos;
        notifyDataSetChanged();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        private ImageView thumbView;
        private TextView titleView;
        private TextView priceView;
        private RelativeTimeTextView timeView;
        private TextView userView;
        private LinearLayout itemView;
        private TextView durationText;

        ViewHolder(LinearLayout v) {
            super(v);
            itemView = v;
            thumbView = v.findViewById(R.id.item_image);
            titleView = v.findViewById(R.id.item_title);
            timeView =  v.findViewById(R.id.item_time);
            priceView = v.findViewById(R.id.item_value);
            userView =  v.findViewById(R.id.item_user);
            durationText = v.findViewById(R.id.duration_text);
        }
    }


    // Create new views (invoked by the layout manager)
    @Override
    public ChannelAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                        int viewType) {
        // create a new view
        LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.suggested_item, parent, false);
        v.setFocusable(true);
        v.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ChannelAdapter.ViewHolder holder, int position) {
        holder.titleView.setTag(position);
        holder.itemView.setOnClickListener(clickListener);

        holder.titleView.setText(videos.get(position).title);
        holder.timeView.setReferenceTime(videos.get(position).getDate());
        if (videos.get(position).price==null)
            holder.priceView.setVisibility(View.GONE);
        else
            holder.priceView.setVisibility(View.VISIBLE);
        holder.priceView.setText(videos.get(position).price);
        holder.userView.setText(videos.get(position).user);
        holder.itemView.setTag(holder);

        if (videos.get(position).getDuration()!=null) {
            holder.durationText.setVisibility(View.VISIBLE);
            holder.durationText.setText(videos.get(position).getDuration());
        }else
            holder.durationText.setVisibility(View.INVISIBLE);


        Picasso.get().load(videos.get(position).getImageURL()).placeholder(R.drawable.ic_ondemand_video).resize(400,400).centerInside().into(
                holder.thumbView);
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        if (videos == null)
            return 0;
        else {
            return videos.size();
        }
    }

    @Override
    public long getItemId(int position) {
        if (videos!=null)
            return videos.get(position).hashCode();
        return super.getItemId(position);
    }
}