package net.buycraft.plugin.shared.tasks;
import com.google.common.collect.ImmutableList;
import lombok.RequiredArgsConstructor;
import net.buycraft.plugin.IBuycraftPlatform;
import net.buycraft.plugin.client.ApiException;
import net.buycraft.plugin.data.Category;
import net.buycraft.plugin.data.Coupon;
import net.buycraft.plugin.data.Package;
import net.buycraft.plugin.data.responses.Listing;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
@RequiredArgsConstructor
public class CouponUpdateTask implements Runnable {
private final IBuycraftPlatform platform;
private final AtomicReference<List<Coupon>> listing = new AtomicReference<>();
private final AtomicReference<Date> lastUpdate = new AtomicReference<>();
private final Runnable updateTask;
@Override
public void run() {
if (platform.getApiClient() == null) {
// no API client
return;
}
try {
listing.set(platform.getApiClient().getAllCoupons());
} catch (IOException | ApiException e) {
platform.log(Level.SEVERE, "Error whilst retrieving coupon listing", e);
return;
}
lastUpdate.set(new Date());
if (updateTask != null) {
updateTask.run();
}
}
public List<Coupon> getListing() {
List<Coupon> coupons = listing.get();
return coupons == null ? ImmutableList.<Coupon>of() : coupons;
}
public Date getLastUpdate() {
return lastUpdate.get();
}
public Coupon getCouponByCode(String code) {
List<Coupon> listing = getListing();
for (Coupon coupon : listing) {
if (coupon.getCode().equalsIgnoreCase(code)) {
return coupon;
}
}
return null;
}
}