package com.example.gravitydemo import ai.gravityfield.gravity_sdk.GravitySDK import ai.gravityfield.gravity_sdk.models.CampaignContent import ai.gravityfield.gravity_sdk.models.PageContext import ai.gravityfield.gravity_sdk.network.Campaign import org.json.JSONObject data class SelectedGravityContent(val campaign: Campaign, val content: CampaignContent) // Принимает обычное имя selector; JSON-кодирование для SDK выполняется один раз. suspend fun loadRootGravityContent( selector: String, pageContext: PageContext, ): SelectedGravityContent? { val response = GravitySDK.instance.getContentBySelector( selector = JSONObject.quote(selector), pageContext = pageContext, ) ?: return null for (campaign in response.data) { for (variation in campaign.payload) { val content = variation.contents.firstOrNull { it.step == null } ?: continue return SelectedGravityContent(campaign, content) } } return null } data class CheckoutExperimentConfig(val variant: String, val label: String) fun decodeCheckoutExperiment(selected: SelectedGravityContent): CheckoutExperimentConfig? { val raw = selected.content.custom?.json ?: return null return runCatching { val json = JSONObject(raw) val variant = json.get("variant") as? String ?: return null val label = json.get("label") as? String ?: return null if (variant !in setOf("control", "compact") || label.isBlank()) return null CheckoutExperimentConfig(variant, label) }.getOrNull() }