package com.fireworksdk.bridge.models import org.json.JSONObject object FWTrackPurchaseModelDeserializer { private const val ORDER_ID_KEY = "orderId" private const val VALUE_KEY = "value" private const val CURRENCY_CODE_KEY = "currencyCode" private const val COUNTRY_KEY = "countryCode" private const val SHIPPING_PRICE_KEY = "shippingPrice" private const val SUB_TOTAL_KEY = "subtotal" private const val TOTAL_DISCOUNTS_KEY = "totalDiscounts" private const val PRODUCTS_KEY = "products" private const val ADDITIONAL_INFO_KEY = "additionalInfo" fun deserialize(responseJson: JSONObject?): FWTrackPurchaseModel? { responseJson ?: return null val productId = if (responseJson.has(ORDER_ID_KEY)) responseJson.optString(ORDER_ID_KEY) else null val value = if (responseJson.has(VALUE_KEY)) responseJson.optDouble(VALUE_KEY) else null val currencyCode = if (responseJson.has(CURRENCY_CODE_KEY)) responseJson.optString(CURRENCY_CODE_KEY) else null val countryCode = if (responseJson.has(COUNTRY_KEY)) responseJson.optString(COUNTRY_KEY) else null val shoppingPrice = if (responseJson.has(SHIPPING_PRICE_KEY)) responseJson.optDouble(SHIPPING_PRICE_KEY) else null val subtotal = if (responseJson.has(SUB_TOTAL_KEY)) responseJson.optDouble(SUB_TOTAL_KEY) else null val totalDiscounts = if (responseJson.has(TOTAL_DISCOUNTS_KEY)) responseJson.optDouble(TOTAL_DISCOUNTS_KEY) else null val additionalInfoObject = if (responseJson.has(ADDITIONAL_INFO_KEY)) responseJson.optJSONObject(ADDITIONAL_INFO_KEY) else null val productsObject = if (responseJson.has(PRODUCTS_KEY)) responseJson.optJSONArray(PRODUCTS_KEY) else null var products: List? = null if (productsObject != null) { products = FWTrackPurchaseProductDeserializer.deserializeArray(productsObject) } var additionalInfo: Map? = null val keys = additionalInfoObject?.keys() if (keys != null) { val additionalInfoMutableMap: MutableMap = mutableMapOf() for (key in keys) { val v = if (additionalInfoObject.has(key)) additionalInfoObject.optString(key) else null if (v != null) { additionalInfoMutableMap[key] = v } } additionalInfo = additionalInfoMutableMap.toMap() } return FWTrackPurchaseModel( orderId = productId, value = value, currencyCode = currencyCode, countryCode = countryCode, additionalInfo = additionalInfo, shippingPrice = shoppingPrice, subtotal = subtotal, totalDiscounts = totalDiscounts, products = products, ) } }