package org.jarling.models.gson;

import com.google.gson.*;
import org.jarling.models.common.Address;
import org.jarling.models.common.Addresses;

import java.lang.reflect.Type;

/**
 *
 * @author Nav Roudsari ([email protected])
 *
 */
public class AddressesDeserializer extends BaseDeserialzer {

    private final Class<?> clazz = Addresses.class;

    public Addresses deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {

        // Previous address is actually an array of previous addresses that may be blank.
        final JsonObject jsonObject = jsonElement.getAsJsonObject();
        final int numberOfPreviousAddresses = jsonObject.get("previous").getAsJsonArray().size();
        final JsonElement jsonCurrent = jsonObject.get("current");
        final JsonElement jsonPrevious = numberOfPreviousAddresses > 0 ? jsonObject.get("previous").getAsJsonArray().get(0) : null;

        Object addressesInstance = null;
        try {
            addressesInstance = clazz.newInstance();
        } catch (IllegalAccessException | InstantiationException e) {
            e.printStackTrace();
        }

        assignObjectField(addressesInstance, jsonCurrent, "current", Address.class);
        assignObjectField(addressesInstance, jsonPrevious, "previous", Address.class);

        return (Addresses) addressesInstance;
    }
}