package io.itch.models;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.os.Parcel;
import android.os.Parcelable;

public class Game implements Parcelable {

    private static final int FIELD_PUBLISHED_AT = 1 << 0;

    private boolean pOsx;
    private boolean pAndroid;
    private boolean pWindows;
    private boolean pLinux;
    private Float minPrice;
    private Long id;
    private boolean published;
    private Long viewsCount;
    private Date createdAt;
    private Date publishedAt;
    private Long downloadsCount;
    private String title;
    private String url;
    private Long purchasesCount;
    private String shortText;
    private String type;
    private String coverUrl;
    private List<Earning> earnings;

    public boolean getPOsx() {
        return pOsx;
    }

    public void setPOsx(boolean pOSX) {
        this.pOsx = pOSX;
    }

    public boolean getPAndroid() {
        return pAndroid;
    }

    public void setPAndroid(boolean pAndroid) {
        this.pAndroid = pAndroid;
    }

    public boolean getPWindows() {
        return pWindows;
    }

    public void setPWindows(boolean pWindows) {
        this.pWindows = pWindows;
    }

    public boolean getPLinux() {
        return pLinux;
    }

    public void setPLinux(boolean pLinux) {
        this.pLinux = pLinux;
    }

    public Float getMinPrice() {
        return minPrice;
    }

    public void setMinPrice(Float minPrice) {
        this.minPrice = minPrice;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public boolean getPublished() {
        return published;
    }

    public void setPublished(boolean published) {
        this.published = published;
    }

    public Long getViewsCount() {
        return viewsCount;
    }

    public void setViewsCount(Long viewsCount) {
        this.viewsCount = viewsCount;
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    public Date getPublishedAt() {
        return publishedAt;
    }

    public void setPublishedAt(Date publishedAt) {
        this.publishedAt = publishedAt;
    }

    public Long getDownloadsCount() {
        return downloadsCount;
    }

    public void setDownloadsCount(Long downloadCount) {
        this.downloadsCount = downloadCount;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Long getPurchasesCount() {
        return purchasesCount;
    }

    public void setPurchasesCount(Long purchasesCount) {
        this.purchasesCount = purchasesCount;
    }

    public String getShortText() {
        return shortText;
    }

    public void setShortText(String shortText) {
        this.shortText = shortText;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getCoverUrl() {
        return coverUrl;
    }

    public void setCoverUrl(String coverUrl) {
        this.coverUrl = coverUrl;
    }

    public List<Earning> getEarnings() {
        return earnings;
    }

    public void setEarnings(List<Earning> earnings) {
        this.earnings = earnings;
    }

    public Earning getDefaultEarnings() {
        Earning result = null;
        if (this.earnings != null && this.earnings.size() > 0) {
            for (Earning e : this.earnings) {
                if ("USD".equalsIgnoreCase(e.getCurrency())) {
                    result = e;
                    break;
                } else if (result == null) {
                    result = e;
                }
            }
        }
        return result;
    }

    @Override
    public int describeContents() {
        int result = 0;
        if (this.getPublishedAt() != null) {
            result |= FIELD_PUBLISHED_AT;
        }
        return result;
    }

    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        int contents = describeContents();
        parcel.writeInt(contents);
        parcel.writeValue(getPOsx());
        parcel.writeValue(getPWindows());
        parcel.writeValue(getPLinux());
        parcel.writeValue(getPAndroid());
        parcel.writeFloat(getMinPrice());
        parcel.writeLong(getId());
        parcel.writeValue(getPublished());
        parcel.writeLong(getViewsCount());
        parcel.writeLong(getCreatedAt().getTime());
        if ((contents & FIELD_PUBLISHED_AT) == FIELD_PUBLISHED_AT) {
            parcel.writeLong(getPublishedAt().getTime());
        }
        parcel.writeLong(getDownloadsCount());
        parcel.writeString(getTitle());
        parcel.writeString(getUrl());
        parcel.writeLong(getPurchasesCount());
        parcel.writeString(getShortText());
        parcel.writeString(getType());
        parcel.writeString(getCoverUrl());
        parcel.writeTypedList(getEarnings());
    }

    public static final Parcelable.Creator<Game> CREATOR = new Parcelable.Creator<Game>() {

        @Override
        public Game createFromParcel(Parcel source) {
            Game result = new Game();
            int contents = source.readInt();
            result.setPOsx((Boolean) source.readValue(null));
            result.setPWindows((Boolean) source.readValue(null));
            result.setPLinux((Boolean) source.readValue(null));
            result.setPAndroid((Boolean) source.readValue(null));
            result.setMinPrice(source.readFloat());
            result.setId(source.readLong());
            result.setPublished((Boolean) source.readValue(null));
            result.setViewsCount(source.readLong());
            result.setCreatedAt(dateFrom(source.readLong()));
            if ((contents & FIELD_PUBLISHED_AT) == FIELD_PUBLISHED_AT) {
                result.setPublishedAt(dateFrom(source.readLong()));
            }
            result.setDownloadsCount(source.readLong());
            result.setTitle(source.readString());
            result.setUrl(source.readString());
            result.setPurchasesCount(source.readLong());
            result.setShortText(source.readString());
            result.setType(source.readString());
            result.setCoverUrl(source.readString());

            List<Earning> earnings = new ArrayList<Earning>();
            source.readTypedList(earnings, Earning.CREATOR);
            result.setEarnings(earnings);

            return result;
        }

        private Date dateFrom(Long time) {
            Date result = new Date();
            result.setTime(time);
            return result;
        }

        @Override
        public Game[] newArray(int size) {
            return new Game[size];
        }
    };
}

@@ -3722,151 +3722,60 @@
 if (
-%22USD%22.equalsIgnoreCase(e.getCurrency())) %7B%0A                    result = e;%0A                    break;%0A                %7D else if (result == null
+result == null %7C%7C e.getAmount() %3E result.getAmount()
 ) %7B%0A

Change the default currency from USD to the earnings with the highest amount