package com.florianmski.tracktoid.adapters.lists;
import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.florianmski.tracktoid.R;
import com.florianmski.tracktoid.TraktoidTheme;
import com.florianmski.tracktoid.utils.Utils;
import com.florianmski.tracktoid.adapters.RecyclerAdapter;
import com.florianmski.tracktoid.data.TraktBase;
import com.florianmski.tracktoid.image.ImagesTest;
import com.florianmski.tracktoid.image.Type;
import com.florianmski.tracktoid.ui.fragments.calendar.CalendarFragment;
import com.florianmski.tracktoid.ui.widgets.FlagsView;
import com.florianmski.tracktoid.ui.widgets.Placeholder;
import com.florianmski.tracktoid.ui.widgets.TraktImageView;
import com.uwetrottmann.trakt.v2.entities.CalendarEntry;
import com.uwetrottmann.trakt.v2.entities.Episode;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.List;
public class RecyclerCalendarAdapter extends RecyclerAdapter<CalendarFragment.CalendarDay, RecyclerAdapter.ViewHolder>
{
private final static int ITEM_DATE = 0, ITEM_EPISODE = 1;
private SparseArray<DateTime> dates = new SparseArray<>();
private SparseArray<CalendarEntry> calendarEntries = new SparseArray<>();
private final DateTimeFormatter dtf = DateTimeFormat.forPattern("EEEE d MMMM");
private TraktoidTheme theme = TraktoidTheme.SHOW;
private Placeholder placeholder;
public RecyclerCalendarAdapter(Context context, List<CalendarFragment.CalendarDay> data, OnItemClickListener listener)
{
super(context, data, listener);
setupDataStructures();
placeholder = new Placeholder(context, theme);
}
private void setupDataStructures()
{
clearDataStructures();
int i = 0;
for(CalendarFragment.CalendarDay calendarDay : data)
{
dates.put(i++, calendarDay.dateTime);
for(CalendarEntry calendarEntry : calendarDay.calendarEntries)
calendarEntries.put(i++, calendarEntry);
}
}
private void clearDataStructures()
{
dates.clear();
calendarEntries.clear();
}
@Override
public void refresh(List<CalendarFragment.CalendarDay> data)
{
super.refresh(data);
setupDataStructures();
}
@Override
public void reset()
{
clearDataStructures();
super.reset();
}
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
RecyclerAdapter.ViewHolder vh;
switch(viewType)
{
case ITEM_DATE:
default:
View v = LayoutInflater.from(context).inflate(R.layout.list_item_calendar_date, parent, false);
vh = new DateViewHolder(v);
break;
case ITEM_EPISODE:
v = LayoutInflater.from(context).inflate(R.layout.list_item_trakt_item, parent, false);
vh = new EpisodeViewHolder(v, listener);
break;
}
return vh;
}
@Override
public void onBindViewHolder(RecyclerAdapter.ViewHolder holder, int position)
{
if(getItemViewType(position) == ITEM_DATE)
{
DateViewHolder castedHolder = (DateViewHolder)holder;
DateTime dateTime = dates.get(position);
castedHolder.tvDate.setText(dateTime.toString(dtf));
}
else
{
EpisodeViewHolder castedHolder = (EpisodeViewHolder)holder;
CalendarEntry calendarEntry = calendarEntries.get(position);
Episode episode = calendarEntry.episode;
TraktBase traktBase = TraktBase.fromEpisode(episode);
ImagesTest.load(context, castedHolder.iv, calendarEntry.episode.images).placeholder(placeholder.getDrawable()).into(castedHolder.iv);
castedHolder.fv.init(new FlagsView.Flags
.Builder(traktBase)
.displayTitle(true)
.title(calendarEntry.show.title)
.subtitle(Utils.getSeasonEpisodeString(episode.season, episode.number))
.theme(theme)
.build());
}
}
public boolean isHeader(int position)
{
return dates.get(position) != null;
}
@Override
public int getItemViewType(int position)
{
return isHeader(position) ? ITEM_DATE : ITEM_EPISODE;
}
@Override
public int getItemCount()
{
return dates.size() + calendarEntries.size();
}
public CalendarEntry getCalendarEntry(int position)
{
return calendarEntries.get(position);
}
public static class DateViewHolder extends RecyclerAdapter.ViewHolder
{
private TextView tvDate;
public DateViewHolder(View itemView)
{
super(itemView);
tvDate = (TextView) itemView.findViewById(R.id.textViewDate);
}
}
public static class EpisodeViewHolder extends RecyclerAdapter.ViewHolder
{
private FlagsView fv;
private TraktImageView iv;
public EpisodeViewHolder(View itemView, OnItemClickListener listener)
{
super(itemView, listener);
fv = (FlagsView) itemView.findViewById(R.id.flagsView);
iv = (TraktImageView) itemView.findViewById(R.id.imageView);
iv.setType(Type.SCREENSHOT);
}
}
}