package com.mechinn.android.ouralliance.data;
import android.database.Cursor;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;
import com.activeandroid.query.Select;
import java.util.Date;
import java.util.List;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.util.AsyncExecutor;
@Table(name = Match.TAG, id = Match.ID)
public class Match extends com.mechinn.android.ouralliance.data.OurAllianceObject implements Comparable<Match>, java.io.Serializable {
public final static String TAG = "Match";
public final static String EVENT = Event.TAG;
public final static String COMPETITION_LEVEL = "compLevel";
public final static String MATCH_NUMBER = "matchNum";
public final static String SET_NUMBER = "setNumber";
public final static String TIME = "time";
public final static String RED_SCORE = "redScore";
public final static String BLUE_SCORE = "blueScore";
public final static String EIGHTH_FINALS = "ef";
public final static String QUARTER_FINALS = "qf";
public final static String SEMI_FINALS = "sf";
public final static String FINALS = "f";
public final static String QUALIFIER = "qm";
public final static String PRACTICE = "p";
@Column(name=EVENT, onDelete = Column.ForeignKeyAction.CASCADE, notNull = true, onNullConflict = Column.ConflictAction.FAIL, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL})
private Event event;
@Column(name=COMPETITION_LEVEL, notNull = true, onNullConflict = Column.ConflictAction.FAIL, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL})
private String compLevel;
@Column(name=MATCH_NUMBER, notNull = true, onNullConflict = Column.ConflictAction.FAIL, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL})
private int matchNumber;
@Column(name=SET_NUMBER, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL})
private Integer setNumber;
@Column(name=TIME)
private Long time;
@Column(name=RED_SCORE)
private Integer redScore;
@Column(name=BLUE_SCORE)
private Integer blueScore;
private Alliances alliances;
public Match() {}
public Match(Cursor cursor) {
this.loadFromCursor(cursor);
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
if(null==event && null!=this.event || null!=event && !event.equals(this.event)) {
this.event = event;
changedData();
}
}
public void replaceEvent(Event event) {
this.event = event;
}
public String getCompLevel() {
return compLevel;
}
public String compLevelString() {
if(getCompLevel().equals(EIGHTH_FINALS)) {
return "Eigtht Finals";
} else if(getCompLevel().equals(QUARTER_FINALS)) {
return "Quarter Finals";
} else if(getCompLevel().equals(SEMI_FINALS)) {
return "Semi Finals";
} else if(getCompLevel().equals(FINALS)) {
return "Finals";
} else if(getCompLevel().equals(PRACTICE)) {
return "Practice";
} else {
return "Qualifier";
}
}
public int getCompLevelValue() {
if(getCompLevel().equals(EIGHTH_FINALS)) {
return 40;
} else if(getCompLevel().equals(QUARTER_FINALS)) {
return 60;
} else if(getCompLevel().equals(SEMI_FINALS)) {
return 80;
} else if(getCompLevel().equals(FINALS)) {
return 100;
} else if(getCompLevel().equals(PRACTICE)) {
return 0;
} else {
return 20;
}
}
public void setCompLevel(String compLevel) {
if(null==compLevel && null!=this.compLevel || null!=compLevel && !compLevel.equals(this.compLevel)) {
this.compLevel = compLevel;
changedData();
}
}
public int getMatchNumber() {
return matchNumber;
}
public void setMatchNumber(int matchNumber) {
if(matchNumber!=this.matchNumber) {
this.matchNumber = matchNumber;
changedData();
}
}
public Integer getSetNumber() {
return setNumber;
}
public void setSetNumber(Integer setNumber) {
if(null==setNumber && null!=this.setNumber || null!=setNumber && !setNumber.equals(this.setNumber)) {
this.setNumber = setNumber;
changedData();
}
}
public Date getTime() {
if(null==time) {
return null;
}
return new Date(time);
}
public void setTime(Date time) {
if(null==time && null!=this.time || null!=time && !time.equals(this.getTime())) {
this.time = time.getTime();
changedData();
}
}
public Integer getRedScore() {
return redScore;
}
public void setRedScore(Integer redScore) {
if(null==redScore && null!=this.redScore || null!=redScore && !redScore.equals(this.redScore)) {
this.redScore = redScore;
changedData();
}
}
public Integer getBlueScore() {
return blueScore;
}
public void setBlueScore(Integer blueScore) {
if(null==blueScore && null!=this.blueScore || null!=blueScore && !blueScore.equals(this.blueScore)) {
this.blueScore = blueScore;
changedData();
}
}
public Alliances getAlliances() {
return alliances;
}
public List<MatchScouting> getTeams() {
return getMany(MatchScouting.class, TAG);
}
public String toString() {
String string = compLevelString()+": ";
if(getCompLevel().equals(EIGHTH_FINALS) || getCompLevel().equals(QUARTER_FINALS) || getCompLevel().equals(SEMI_FINALS)) {
string += getSetNumber()+" Match: ";
}
return string+this.getMatchNumber();
}
public static Match load(long eventId, String compLevel, int matchNumber, Integer setNumber) {
return new Select().from(Match.class).where(Match.EVENT+"=?",eventId).and(Match.COMPETITION_LEVEL+"=?",compLevel).and(Match.MATCH_NUMBER+"=?",matchNumber).and(Match.SET_NUMBER+"=?",setNumber).executeSingle();
}
public void saveMod() {
if (null == this.getId()) {
this.getEvent().saveMod();
if(-1==this.getEvent().getId()) {
replaceEvent(Event.load(this.getEvent().getEventCode(), this.getEvent().getYear()));
}
}
super.saveMod();
}
public boolean copy(Match data) {
if(this.equals(data)) {
super.copy(data);
this.setTime(data.getTime());
this.setRedScore(data.getRedScore());
this.setBlueScore(data.getBlueScore());
return true;
}
return false;
}
public boolean equals(Object data) {
if(!(data instanceof Match)) {
return false;
}
try {
return getEvent().equals(((Match) data).getEvent()) &&
getCompLevel().equals(((Match) data).getCompLevel()) &&
getSetNumber().equals(((Match) data).getSetNumber()) &&
getMatchNumber() == ((Match) data).getMatchNumber();
} catch (NullPointerException e) {
return false;
}
}
public int compareTo(Match another) {
int compare = this.getCompLevelValue() - another.getCompLevelValue();
if(0==compare) {
compare = this.getMatchNumber() - another.getMatchNumber();
}
return compare;
}
public void asyncSave() {
AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() {
@Override
public void run() throws Exception {
saveMod();
EventBus.getDefault().post(Match.this);
}
});
}
public void asyncDelete() {
AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() {
@Override
public void run() throws Exception {
delete();
EventBus.getDefault().post(Match.this);
}
});
}
}