package com.ratebeer.android.api.model;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.ratebeer.android.api.Normalizer;

import java.lang.reflect.Type;

public final class BeerSearchResultDeserializer implements JsonDeserializer<BeerSearchResult> {

	@Override
	public BeerSearchResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
		JsonObject object = json.getAsJsonObject();
		BeerSearchResult beerSearchResult = new BeerSearchResult();
		beerSearchResult.beerId = object.get("BeerID").getAsInt();
		beerSearchResult.beerName = Normalizer.get().cleanHtml(object.get("BeerName").getAsString());
		beerSearchResult.brewerId = object.get("BrewerID").getAsInt();

		if (!(object.get("OverallPctl") instanceof JsonNull))
			beerSearchResult.overallPercentile = object.get("OverallPctl").getAsFloat();
		beerSearchResult.rateCount = object.get("RateCount").getAsInt();
		if (object.has("Unrateable") && !(object.get("Unrateable") instanceof JsonNull))
			beerSearchResult.unrateable = object.get("Unrateable").getAsBoolean();
		if (object.has("IsAlias") && !(object.get("IsAlias") instanceof JsonNull))
			beerSearchResult.alias = object.get("IsAlias").getAsBoolean();
		beerSearchResult.retired = object.get("Retired").getAsBoolean();
		if (object.has("IsRated") && !(object.get("IsRated") instanceof JsonNull))
			beerSearchResult.ratedByUser = object.get("IsRated").getAsInt() == 1;
		return beerSearchResult;
	}

}