package com.mechinn.android.ouralliance.rest.thebluealliance;
import android.content.Context;
import com.activeandroid.ActiveAndroid;
import com.activeandroid.Model;
import com.activeandroid.query.Select;
import com.mechinn.android.ouralliance.Prefs;
import com.mechinn.android.ouralliance.data.Event;
import com.mechinn.android.ouralliance.data.EventTeam;
import com.mechinn.android.ouralliance.data.Team;
import com.mechinn.android.ouralliance.event.ToastEvent;
import com.mechinn.android.ouralliance.rest.TheBlueAlliance;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.util.AsyncExecutor;
import retrofit.RetrofitError;
import timber.log.Timber;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class GetEventTeams implements AsyncExecutor.RunnableEx {
public static final String TAG = "GetEventTeams";
private Prefs prefs;
public GetEventTeams(Context context) {
this.prefs = new Prefs(context);
}
@Override
public void run() throws Exception {
ToastEvent.toast("Downloading event teams...",true);
Event event = Model.load(Event.class,prefs.getComp());
Timber.d("year: " + prefs.getYear());
Timber.d( "Setting up teams");
ActiveAndroid.beginTransaction();
try {
int year = prefs.getYear();
List<Team> teams = TheBlueAlliance.getService().getEventTeams(year + event.getEventCode());
List<EventTeam> ranks = new Select().from(EventTeam.class).where(EventTeam.EVENT + "=?", event.getId()).orderBy(EventTeam.RANK + " DESC").execute();
int nextRank = 0;
if(!ranks.isEmpty()) {
nextRank = ranks.get(0).getRank()+1;
}
Collections.sort(teams);
for(int teamRank=0;teamRank<teams.size();teamRank++) {
EventTeam eventTeam = new EventTeam();
eventTeam.setEvent(event);
eventTeam.setTeam(teams.get(teamRank));
eventTeam.setRank(nextRank);
eventTeam.saveMod();
if(-1!=eventTeam.getId()) {
nextRank++;
}
}
ActiveAndroid.setTransactionSuccessful();
if(!teams.isEmpty()) {
EventBus.getDefault().post(new Team());
EventBus.getDefault().post(new EventTeam());
}
ToastEvent.toast("Finished downloading teams",false);
prefs.setEventTeamsDownloaded(true);
} catch (RetrofitError e) {
Timber.e(e,"Error downloading event teams");
if (e.getKind() == RetrofitError.Kind.NETWORK) {
ToastEvent.toast("Unable to connect");
} else if (e.getResponse().getStatus() != 200) {
ToastEvent.toast("Error " + e.getResponse().getStatus() + " connecting");
}
} finally {
ActiveAndroid.endTransaction();
}
}
}