/*
Swisscom Safe Connect
Copyright (C) 2014 Swisscom
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.swisscom.safeconnect.model;
import com.swisscom.safeconnect.billing.SkuDetails;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.Serializable;
import java.util.regex.Pattern;
/**
* Created by vadim on 03.10.14.
* combines data about subscription from plumber and google play
*/
public class Subscription implements Serializable {
private static final Pattern pricePattern = Pattern.compile("(?:\\d*\\.?,?)?\\d+");
private String sku;
private String description;
private String price;
private String currency = "CHF";
private String title;
private int daysValid;
private long validTill;
private int id;
public Subscription(String sku) {
this.sku = sku;
}
public Subscription(String sku, String description, String price, String title, int daysValid,
long validTill) {
this.sku = sku;
this.description = description;
this.price = price;
this.title = title;
this.daysValid = daysValid;
this.validTill = validTill;
}
public Subscription(PlumberSubscriptionResponse s) {
this.sku = s.getName();
this.description = s.getDescription();
this.price = String.valueOf(s.getPrice());
this.title = s.getDescription();
this.daysValid = s.getDaysValid();
this.validTill = s.getValidTill();
this.id = s.getId();
}
public Subscription(SkuDetails sd, PlumberSubscriptionResponse s) {
this.sku = sd.getSku();
this.description = sd.getDescription();
this.title = sd.getTitle();
this.daysValid = s.getDaysValid();
this.validTill = s.getValidTill();
this.id = s.getId();
try {
JSONObject j = new JSONObject(sd.getJson());
long priceMicros = j.optLong("price_amount_micros");
float priceNormal = priceMicros/1000000f;
if (priceNormal == Math.ceil(priceNormal)) {
this.price = String.format("%.0f", priceNormal);
} else {
this.price = String.format("%.2f", priceNormal);
}
this.currency = j.optString("price_currency_code");
} catch (JSONException e) {
this.price = String.format("%.2f", s.getPrice());
}
}
public Subscription(Subscription s, long validTill) {
this.sku = s.getSku();
this.description = s.getDescription();
this.price = s.price;
this.currency = s.currency;
this.title = s.getTitle();
this.daysValid = s.getDaysValid();
this.validTill = validTill;
this.id = s.getId();
}
public String getSku() {
return sku;
}
public String getDescription() {
return description;
}
public String getPrice() {
return price;
}
public String getTitle() {
return title;
}
public int getDaysValid() {
return daysValid;
}
public long getValidTill() {
return validTill;
}
public int getId() {
return id;
}
public String getCurrency() {
return currency;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Subscription)) return false;
Subscription that = (Subscription) o;
if (sku != null ? !sku.equals(that.sku) : that.sku != null) return false;
return true;
}
@Override
public int hashCode() {
return sku != null ? sku.hashCode() : 0;
}
@Override
public String toString() {
if (sku != null) return sku;
return "nameless subscription";
}
}