##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature,InnerClasses,EnclosingMethod

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
-keep class com.google.gson.stream.** { *; }

##---------------Begin: Conviva Replay SDK runtime --------------
# Conviva public API and embedded PostHog replay engine.
# Required when the host app runs R8/ProGuard (minifyEnabled true).
# Library-side rules live in proguard-rules.pro; these rules protect the app merge pass.
-keep class com.conviva.** { *; }

# React Native writes the nativeID prop to this keyed resource tag
# (BaseViewManager.setNativeId -> setTag(R.id.view_tag_native_id, ...)).
# ReactNativeNoCaptureUtil reads it reflectively for manual masking, so R8 must
# not inline+strip the field (reflection is invisible to R8's reference graph).
# Naturally inert when React Native is absent -- the class won't exist to match.
-keep class com.facebook.react.R$id {
    public static int view_tag_native_id;
}

# React Native core view classes that the masking engine resolves by their original
# fully-qualified name (Class.forName + Class.isInstance in ReactNativeViewUtil, and
# isReactNativeApp via Class.forName in PostHogReplayIntegration). RN's bundled consumer
# rules only keep com.facebook.react.bridge/turbomodule, so R8 renames these in a minified
# app build -- verified against a release mapping.txt: ReactRootView -> com.facebook.react.w,
# ReactViewGroup -> com.facebook.react.views.view.k. Once renamed the lookups return null,
# so RN container subtrees are no longer force-traversed and inputs/labels under them leak on
# the first post-navigation frame (masking works in debug, where nothing is renamed).
# -keepnames preserves only the name (no members, shrinking still allowed); naturally inert
# when React Native is absent. ReactEditText is intentionally NOT kept: every consumer falls
# back to `view is android.widget.EditText`, a framework class R8 never renames.
-keepnames class com.facebook.react.ReactRootView
-keepnames class com.facebook.react.views.view.ReactViewGroup
##---------------End: Conviva Replay SDK runtime --------------

## Application classes that will be serialized/deserialized over Gson
-keep class com.ph.PostHogEvent { *; }
-keep class com.ph.PostHogEvent { <init>(); }
#
#-keep class com.ph.internal.PostHogBatchEvent { *; }
#-keep class com.ph.internal.PostHogBatchEvent { <init>(); }
#
#-keep class com.ph.internal.PostHogFlagsRequest { *; }
#-keep class com.ph.internal.PostHogFlagsRequest { <init>(); }
#
#-keep class com.ph.internal.PostHogFlagsResponse { *; }
#-keep class com.ph.internal.PostHogFlagsResponse { <init>(); }
#
#-keep class com.ph.internal.FeatureFlag { *; }
#-keep class com.ph.internal.FeatureFlag { <init>(); }
#
#-keep class com.ph.internal.FeatureFlagMetadata { *; }
#-keep class com.ph.internal.FeatureFlagMetadata { <init>(); }
#
#-keep class com.ph.internal.EvaluationReason { *; }
#-keep class com.ph.internal.EvaluationReason { <init>(); }
#
#-keep class com.ph.internal.PostHogRemoteConfigResponse { *; }
#-keep class com.ph.internal.PostHogRemoteConfigResponse { <init>(); }
#
## Session Replay
-keep class com.ph.internal.replay.** { *; }
-keep class com.ph.internal.replay.** { <init>(); }
#
## Surveys
#-keep class com.ph.surveys.** { *; }
#-keep class com.ph.surveys.** { <init>(); }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
 @com.google.gson.annotations.SerializedName <fields>;
}

-keep class com.google.gson.** { *; }

-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken { *; }

##---------------End: proguard configuration for Gson  ----------

##---------------Begin: proguard configuration for okhttp3  ----------
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

# A resource is loaded with a relative path so the package of this class must be preserved.
-adaptresourcefilenames okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt and other security providers are available.
-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**
##---------------End: proguard configuration for okhttp3  ----------

##---------------Begin: proguard configuration for okhttp3  ----------
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

# A resource is loaded with a relative path so the package of this class must be preserved.
-adaptresourcefilenames okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt and other security providers are available.
-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**

# used in reflection to check if compose is available at runtime
-keepnames class androidx.compose.ui.platform.AndroidComposeView

# Uncomment this to preserve the line number information for
# debugging stack traces.
-keepattributes SourceFile,LineNumberTable
