# Keep attributes needed for proper SDK functionality
-keepattributes InnerClasses

# Observability/analytics — referenced by Transact internally; kept so consumer R8
# can resolve the field types reachable from the public Transact class.
-keep class financial.atomic.transact.analytics.** { *; }

# Native loading screen (SDK-718) — kept so consumer R8 can resolve the field types reachable from
# the public Transact class. Scoped to these two classes (plus LoadingController's nested Clock /
# Scheduler / Cancellable / State) on purpose: a package-wide keep would also pin TransactView,
# TransactOverlayContainer and anything added to the package later, costing every consuming app code
# size and obfuscation for internals it never touches.
-keep class financial.atomic.transact.view.LoadingController { *; }
-keep class financial.atomic.transact.view.LoadingController$* { *; }
-keep class financial.atomic.transact.view.TransactLoadingView { *; }

# Keep main SDK classes
-keep class financial.atomic.transact.Transact { *; }
-keep class financial.atomic.transact.Transact$Companion { *; }
-keep class financial.atomic.transact.Transact$* { *; }
-keep class financial.atomic.transact.Config { *; }
-keep class financial.atomic.transact.Config$* { *; }
-keep class financial.atomic.transact.Config$** { *; }
-keep class financial.atomic.transact.PausedTransactRef { *; }
-keep class financial.atomic.transact.ActionConfig { *; }
-keep class financial.atomic.transact.Emitter { *; }
-keep class financial.atomic.transact.Emitter$Event { *; }
-keep class financial.atomic.transact.receiver.TransactBroadcastReceiver { *; }
-keep enum financial.atomic.transact.Transact$*
-keep enum financial.atomic.transact.Config$*
-keep enum financial.atomic.transact.Config$**
-keepnames class financial.atomic.transact.Transact { public *; }
-keepnames class financial.atomic.transact.Config { public *; }
-keepnames class financial.atomic.transact.receiver.TransactBroadcastReceiver { public *; }

# Keep all public members of SDK classes
-keepclassmembers class financial.atomic.transact.** {
    public *;
}

# kotlinx-serialization-json specific. Add this if you have java.lang.NoClassDefFoundError kotlinx.serialization.json.JsonObjectSerializer
-keepclassmembers class kotlinx.serialization.json.** {
    *** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
    kotlinx.serialization.KSerializer serializer(...);
}

-keep,includedescriptorclasses class financial.atomic.transact.**$$serializer { *; }
-keepclassmembers class financial.atomic.transact.** {
    *** Companion;
}
-keepclasseswithmembers class financial.atomic.transact.** {
    kotlinx.serialization.KSerializer serializer(...);
}

# muppet
-keep class financial.atomic.muppet.*
-keep enum financial.atomic.muppet.impl.Page$Event
-keepnames class financial.atomic.muppet.impl.Page { public *; }
-keepclassmembers class financial.atomic.muppet.** {
   public *;
}