package com.jeremybarbet.reactnativepurchasekit import com.android.billingclient.api.ProductDetails import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap data class PurchaseKitProduct( val id: String, val name: String, val price: PurchaseKitPrice, val subscription: PurchaseKitSubscription?, ) fun parseProduct(product: ProductDetails, type: String?): PurchaseKitProduct { val isSubscription = type == "subscription" val hasSubscription = product.subscriptionOfferDetails?.isNotEmpty() ?: false val price = parsePrice(product, type) val subscription = if (isSubscription && hasSubscription) { parseSubscription(product) } else { null } return PurchaseKitProduct( product.productId, product.name, price, subscription, ) } fun encodeProduct(product: PurchaseKitProduct): WritableMap { val productMap = Arguments.createMap() productMap.putString("id", product.id) productMap.putString("name", product.name) val priceMap = Arguments.createMap() priceMap.putDouble("value", product.price.value) priceMap.putString("currency", product.price.currency) priceMap.putString("localized", product.price.localized) productMap.putMap("price", priceMap) val subscriptionMap = Arguments.createMap() if (product.subscription != null) { if (product.subscription.period != null) { val periodMap = Arguments.createMap() periodMap.putInt("value", product.subscription.period.value) periodMap.putString("unit", product.subscription.period.unit) periodMap.putString("localized", product.subscription.period.localized) subscriptionMap.putMap("period", periodMap) } else { subscriptionMap.putNull("period") } productMap.putMap("subscription", subscriptionMap) } else { productMap.putNull("subscription") } return productMap }