package com.github.andlyticsproject.model;
import java.util.Arrays;
import java.util.Currency;
import java.util.List;
import android.annotation.SuppressLint;
public class Revenue {
private static final String DECIMALS_FORMAT = "%.2f";
private static final String NO_DECIMALS_FORMAT = "%.0f";
private static final String DECIMAL_CURRENCY_FORMAT = "%s%.2f";
private static final String NO_DECIMALS_CURRENCY_FORMAT = "%s%.0f";
private static final int DECIMAL_DISPLAY_THRESHOLD = 1000;
private static final double DEVELOPER_CUT_PERCENTAGE = 0.7;
public enum Type {
TOTAL, APP_SALES, IN_APP, SUBSCRIPTIONS
}
// TODO add others
public static final String[] NO_DECIMAL_CURRENCIES_ARR = { "JPY" };
public static final List<String> NO_DECIMAL_CURRENCIES = Arrays
.asList(NO_DECIMAL_CURRENCIES_ARR);
private Type type;
private String currencyCode;
private Currency currency;
private double amount;
private double developerCut;
public Revenue(Type type, double amount, String currencyCode) {
this.type = type;
this.amount = amount;
// XXX make this smarter, round up,etc.
this.developerCut = DEVELOPER_CUT_PERCENTAGE * amount;
this.currencyCode = currencyCode;
this.currency = Currency.getInstance(currencyCode);
}
public Type getType() {
return type;
}
public String getCurrencyCode() {
return currencyCode;
}
public Currency getCurrency() {
return currency;
}
public double getAmount() {
return amount;
}
public double getDeveloperCut() {
return developerCut;
}
@SuppressLint("DefaultLocale")
public String asString() {
if (NO_DECIMAL_CURRENCIES.contains(currencyCode)) {
return String.format(NO_DECIMALS_CURRENCY_FORMAT, currency.getSymbol(), amount);
}
return String.format((amount < DECIMAL_DISPLAY_THRESHOLD ? DECIMAL_CURRENCY_FORMAT
: NO_DECIMALS_CURRENCY_FORMAT), currency.getSymbol(), amount);
}
@SuppressLint("DefaultLocale")
public String amountAsString() {
if (NO_DECIMAL_CURRENCIES.contains(currencyCode)) {
return String.format(NO_DECIMALS_FORMAT, amount);
}
return String.format((amount < DECIMAL_DISPLAY_THRESHOLD ? DECIMALS_FORMAT
: NO_DECIMALS_FORMAT), amount);
}
@SuppressLint("DefaultLocale")
public String developerCutAsString() {
if (NO_DECIMAL_CURRENCIES.contains(currencyCode)) {
return String.format(NO_DECIMALS_CURRENCY_FORMAT, currency.getSymbol(), developerCut);
}
return String.format((amount < DECIMAL_DISPLAY_THRESHOLD ? DECIMAL_CURRENCY_FORMAT
: DECIMAL_CURRENCY_FORMAT), currency.getSymbol(), developerCut);
}
@Override
public String toString() {
return asString();
}
}