package com.noibu.mobile.reactnative import com.facebook.react.bridge.ReadableMap import com.noibu.mobile.sessionreplay.LogLevel import com.noibu.mobile.sessionreplay.SessionReplayConfig /** JS `NoibuConfig` map → [SessionReplayConfig]. Unknown keys are ignored; missing keys keep the * native defaults. Throws on a missing/blank `domain` (surfaces as a rejected init promise). */ internal fun ReadableMap.toSessionReplayConfig(): SessionReplayConfig { val domain = stringOrNull("domain") require(!domain.isNullOrBlank()) { "NoibuConfig.domain is required" } return SessionReplayConfig( domain = domain, logLevel = stringOrNull("logLevel")?.let { level -> LogLevel.entries.firstOrNull { it.name.equals(level, ignoreCase = true) } }, ingestHost = stringOrNull("ingestHost"), trackTouches = boolOr("trackTouches", true), trackKeyboard = boolOr("trackKeyboard", true), trackNetwork = boolOr("trackNetwork", true), trackWebViews = boolOr("trackWebViews", true), autoTrackNavigation = boolOr("autoTrackNavigation", false), trackErrors = boolOr("trackErrors", true), ) } internal fun ReadableMap.stringOrNull(key: String): String? = if (hasKey(key) && !isNull(key)) getString(key) else null internal fun ReadableMap.boolOr(key: String, default: Boolean): Boolean = if (hasKey(key) && !isNull(key)) getBoolean(key) else default internal fun ReadableMap.longOrNull(key: String): Long? = if (hasKey(key) && !isNull(key)) getDouble(key).toLong() else null internal fun ReadableMap.intOr(key: String, default: Int): Int = if (hasKey(key) && !isNull(key)) getInt(key) else default