package com.thomasdh.roosterpgplus.Fragments;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.thomasdh.roosterpgplus.Adapters.AnimatedPagerAdapter;
import com.thomasdh.roosterpgplus.CustomUI.DefaultSpinner;
import com.thomasdh.roosterpgplus.Data.RoosterBuilder;
import com.thomasdh.roosterpgplus.Data.RoosterInfo;
import com.thomasdh.roosterpgplus.Helpers.Apache.BasicNameValuePair;
import com.thomasdh.roosterpgplus.Helpers.Apache.NameValuePair;
import com.thomasdh.roosterpgplus.Helpers.FragmentTitle;
import com.thomasdh.roosterpgplus.Models.Leraar;
import com.thomasdh.roosterpgplus.Models.Lesuur;
import com.thomasdh.roosterpgplus.Models.Vak;
import com.thomasdh.roosterpgplus.R;
import com.thomasdh.roosterpgplus.Settings.Constants;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
@SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
@FragmentTitle(title = R.string.action_bar_dropdown_docentenrooster)
public class DocentenRoosterFragment extends RoosterViewFragment implements AdapterView.OnItemSelectedListener, RoosterBuilder.BuilderFunctions {
private static final Long MIN_REFRESH_WAIT_TIME = (long) 3600000;
@Getter @Setter private Vak vak;
@Getter @Setter private String leraar;
@Getter @Setter private ArrayList<Vak> vakken;
private String leraarToGet = null;
private DefaultSpinner leraarSpinner;
private DefaultSpinner vakSpinner;
@Override
public String getAnalyticsTitle() {
return Constants.ANALYTICS_FRAGMENT_DOCROOSTER;
}
//region Lifecycle
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
setRootView(inflater.inflate(R.layout.fragment_main_docenten, container, false));
viewPager = (ViewPager) getRootView().findViewById(R.id.rooster_viewPager);
viewPager.setAdapter(new AnimatedPagerAdapter());
swipeRefreshLayout = (SwipeRefreshLayout) getRootView().findViewById(R.id.rooster_swiperefresh);
setupSwipeRefreshLayout();
leraarSpinner = (DefaultSpinner) getRootView().findViewById(R.id.main_fragment_spinner_docent_naam);
vakSpinner = (DefaultSpinner) getRootView().findViewById(R.id.main_fragment_spinner_docent_vak);
if(savedInstanceState == null) {
RoosterInfo.getLeraren(getContext(), s -> onLerarenLoaded((ArrayList<Vak>) s));
} else {
setVak((Vak) savedInstanceState.getSerializable("VAK"));
setLeraar(savedInstanceState.getString("LERAAR"));
RoosterInfo.getLeraren(getContext(), s -> onLerarenLoaded((ArrayList<Vak>) s, getLeraar(), getVak()));
}
return getRootView();
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("LERAAR", leraar);
outState.putSerializable("VAK", vak);
super.onSaveInstanceState(outState);
}
//region Spinners
void onLerarenLoaded(ArrayList<Vak> result) {
onLerarenLoaded(result, null, null);
}
void onLerarenLoaded(ArrayList<Vak> result, String Sleraar, Vak Svak) {
if(result == null) return;
setVakken(result);
ArrayList<String> vakNamen = new ArrayList<>();
for(Vak vak : vakken) { vakNamen.add(vak.getNaam()); }
ArrayAdapter<String> vakAdapter = new ArrayAdapter<>(getContext(), R.layout.spinner_title, vakNamen.toArray(new String[vakNamen.size()]));
vakAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
vakSpinner.setAdapter(vakAdapter);
vakSpinner.setOnItemSelectedListener(this);
leraarSpinner.setOnItemSelectedListener(this);
if(Svak != null) {
vakSpinner.setSelection(vakAdapter.getPosition(Svak.getNaam()));
}
leraarToGet = Sleraar;
}
void onVakSelected(int position) {
setVak(vakken.get(position));
ArrayList<String> leraarNamen = new ArrayList<>();
for(Leraar leraar : getVak().leraren) { leraarNamen.add(leraar.naam); }
ArrayAdapter<String> leraarAdapter = new ArrayAdapter<>(getContext(), R.layout.spinner_title, leraarNamen.toArray(new String[leraarNamen.size()]));
leraarAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
leraarSpinner.setAdapter(leraarAdapter);
if(leraarToGet != null) {
leraarSpinner.setSelection(leraarAdapter.getPosition(leraarToGet));
leraarToGet = null;
}
}
void onLeraarSelected(int position) {
setLeraar(getVak().getLeraren().get(position).getCode());
loadRooster();
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(parent.equals(vakSpinner)) {
onVakSelected(position);
} else if(parent.equals(leraarSpinner)) {
onLeraarSelected(position);
}
}
@Override public void onNothingSelected(AdapterView<?> parent) {}
//endregion
//endregion
//region Statemanagement
@Override
public boolean canLoadRooster() { return getLeraar() != null; }
@Override
public List<NameValuePair> getURLQuery(List<NameValuePair> query) {
query.add(new BasicNameValuePair("docent", getLeraar()));
return query;
}
@Override
public long getLoad() { return RoosterInfo.getLoad("docent"+getLeraar()+getWeek(), getContext()); }
@Override
public void setLoad() { RoosterInfo.setLoad("docent" + getLeraar() + getWeek(), System.currentTimeMillis(), getContext()); }
@Override
public LoadType getLoadType() {
Long lastLoad = RoosterInfo.getLoad("docent"+getLeraar()+getWeek(), getContext());
if(lastLoad == null || lastLoad == 0) {
return LoadType.ONLINE;
} else if(System.currentTimeMillis() > lastLoad + MIN_REFRESH_WAIT_TIME) {
return LoadType.NEWONLINE;
} else {
return LoadType.OFFLINE;
}
}
//endregion
//region Rooster
@Override
public RoosterBuilder buildRooster(int urenCount) {
RoosterBuilder builder = super.buildRooster(urenCount);
return builder.setShowVervangenUren(false)
.setBuilderFunctions(this);
}
@Override
public View fillLesView(Lesuur lesuur, View lesView, LayoutInflater inflater) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
TextView vakTextView = (TextView) lesView.findViewById(R.id.rooster_vak);
TextView leraarTextView = (TextView) lesView.findViewById(R.id.rooster_leraar);
TextView lokaalTextView = (TextView) lesView.findViewById(R.id.rooster_lokaal);
TextView tijdenTextView = (TextView) lesView.findViewById(R.id.rooster_tijden);
vakTextView.setText(lesuur.vak);
leraarTextView.setText(StringUtils.join(lesuur.klassen, " & "));
lokaalTextView.setText(lesuur.lokaal);
tijdenTextView.setText(format.format(lesuur.lesStart) + " - " + format.format(lesuur.lesEind));
return lesView;
}
//endregion
}