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 PlaceSearchResultDeserializer implements JsonDeserializer<PlaceSearchResult> {

	@Override
	public PlaceSearchResult deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
		JsonObject object = json.getAsJsonObject();
		PlaceSearchResult placeSearchResult = new PlaceSearchResult();
		placeSearchResult.placeId = object.get("PlaceID").getAsInt();
		placeSearchResult.placeName = Normalizer.get().cleanHtml(object.get("PlaceName").getAsString());
		placeSearchResult.placeType = object.get("PlaceType").getAsInt();
		placeSearchResult.city = Normalizer.get().cleanHtml(object.get("City").getAsString());
		if (object.has("CountryID") && !(object.get("CountryID") instanceof JsonNull))
			placeSearchResult.countryId = object.get("CountryID").getAsInt();
		if (object.has("StateId") && !(object.get("StateID") instanceof JsonNull))
			placeSearchResult.stateId = object.get("StateID").getAsInt();
		if (object.has("Percentile") && !(object.get("Percentile") instanceof JsonNull))
			placeSearchResult.overallPercentile = object.get("Percentile").getAsFloat();
		if (object.has("AvgRating") && !(object.get("AvgRating") instanceof JsonNull))
			placeSearchResult.averageRating = object.get("AvgRating").getAsFloat();
		if (object.has("RateCount") && !(object.get("RateCount") instanceof JsonNull))
			placeSearchResult.rateCount = object.get("RateCount").getAsInt();
		return placeSearchResult;
	}

}