package com.byoutline.kickmaterial.model;
import android.text.TextUtils;
import com.byoutline.kickmaterial.utils.DateTimeParcelConverter;
import com.byoutline.kickmaterial.utils.PeriodToStringConverter;
import com.byoutline.kickmaterial.utils.QueryParamsExtractor;
import com.google.gson.annotations.SerializedName;
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.PeriodType;
import org.parceler.Parcel;
import org.parceler.ParcelPropertyConverter;
import java.text.DecimalFormat;
import java.util.Map;
/**
* @author Pawel Karczewski <pawel.karczewski at byoutline.com> on 2015-01-03
*/
@Parcel(Parcel.Serialization.FIELD)
public class Project {
public static final DecimalFormat MONEY_USA_FORMATTER = new DecimalFormat("###,###,###,###");
public int id;
@SerializedName("name")
public String title;
@SerializedName("blurb")
public String desc;
@SerializedName("goal")
public float totalAmount;
@SerializedName("pledged")
public float gatheredAmount;
@SerializedName("backers_count")
public int backers;
public ProjectCreator creator;
// public String photoUrl = "http://xe.cdn03.imgwykop.pl/c3397993/link_ERJss0RLvG26DPiTOgxUNjALqUU469qu,w300h223.jpg";
public ProjectPhoto photo;
public String currencySymbol;
@ParcelPropertyConverter(DateTimeParcelConverter.class)
public DateTime launchedAt;
@ParcelPropertyConverter(DateTimeParcelConverter.class)
public DateTime deadline;
public ProjectUrls urls;
public String getPhotoUrl() {
return photo.med;
}
public String getBigPhotoUrl() {
// Currently full photos have size of w=560&h=420.
return photo.full;
}
public String getAuthorUrl() {
if (creator == null) {
return "";
}
return creator.urls.web.user;
}
public ProjectTime getTimeLeft() {
return getTimeLeft(DateTime.now());
}
ProjectTime getTimeLeft(DateTime now) {
if (now.isAfter(deadline)) {
// TODO: add successful.
return new ProjectTime("ENDED", deadline.toString());
}
Period period = new Period(now, deadline, PeriodType.dayTime());
return PeriodToStringConverter.periodToProjectTime(period);
}
public float getPercentProgress() {
if (gatheredAmount == 0) {
return 0;
}
return Math.min(1f, gatheredAmount / totalAmount) * 100;
}
public boolean isFunded() {
return gatheredAmount >= totalAmount;
}
public String getProjectName() {
return title;
}
public String getGatheredAmount() {
return MONEY_USA_FORMATTER.format(gatheredAmount);
}
public String getTotalAmount() {
return MONEY_USA_FORMATTER.format(totalAmount);
}
public Map<String, String> getDetailsQueryMap() {
return QueryParamsExtractor.getQueryParams(urls.api.project);
}
public String getProjectUrl() {
if (urls == null || urls.web == null) {
return "";
}
return urls.web.project;
}
public String getPledgeUrl() {
return getGeneratedUrl("/pledge/new?clicked_reward=false");
}
public String getCommentsUrl() {
return getGeneratedUrl("/comments");
}
public String getUpdatesUrl() {
return getGeneratedUrl("/updates");
}
private String getGeneratedUrl(String suffix) {
String projectUlr = getProjectUrl();
if (TextUtils.isEmpty(projectUlr)) {
return "";
}
return projectUlr + suffix;
}
public String getProjectCreatorAvatar() {
String avatarUrl = "";
if (creator != null && creator.avatar != null) {
avatarUrl = creator.avatar.medium;
}
return avatarUrl;
}
public String getAuthorName() {
String name = "";
if (creator != null) {
name = creator.name;
}
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Project project = (Project) o;
return id == project.id;
}
@Override
public int hashCode() {
return id;
}
@Override
public String toString() {
return "Project{" +
"id=" + id +
", title='" + title + '\'' +
", desc='" + desc + '\'' +
", totalAmount=" + totalAmount +
", gatheredAmount=" + gatheredAmount +
", backers=" + backers +
", creator=" + creator +
", photo=" + photo +
", currencySymbol='" + currencySymbol + '\'' +
", launchedAt=" + launchedAt +
", deadline=" + deadline +
", urls=" + urls +
'}';
}
}