# AdSpace AdMob SDK - Consumer ProGuard Rules

# Keep Timber logging
-keep class timber.log.Timber { *; }
-keep class timber.log.Timber$Tree { *; }
-keepnames class timber.log.Timber$* { *; }

# Keep MMKV
-keep class com.tencent.mmkv.** { *; }

# Keep Moshi
-keep @com.squareup.moshi.JsonClass public class *
-keepclassmembers class com.squareup.moshi.** { *; }
-keep class **$JsonAdapter { *; }

# Keep Firebase
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn com.google.firebase.**
-keep class com.google.firebase.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.joda.** { *; }
-dontwarn org.joda.**
-dontwarn javax.servlet.**

# Keep User Messaging Platform (UMP)
-keep class com.google.android.ump.** { *; }
-keepclassmembers class com.google.android.ump.** { *; }

# Keep Google Mobile Ads
-keep class com.google.android.gms.ads.** { *; }
-keepclassmembers class com.google.android.gms.ads.** { *; }
-keepattributes *Annotation*
-keep class com.google.ads.** { *; }
-keepclassmembers class com.google.ads.** { *; }

# Keep Google Play Services
-dontwarn com.google.android.gms.**

# Keep Lifecycle
-keep class * extends androidx.lifecycle.ViewModel { *; }
-keep class * extends androidx.lifecycle.AndroidViewModel { *; }
-keepclassmembers class * extends androidx.lifecycle.ViewModel { *; }

# Keep Coroutines
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}

# Keep Data Classes for AdSpace SDK
-keep class com.admob.adspace.** { *; }
-keepclassmembers class com.admob.adspace.** { *; }

# Keep Event Bus classes
-keepclassmembers class com.admob.adspace.event.** { *; }
-keepattributes InnerClasses

# Keep Ad Provider implementations
-keep class * implements com.admob.adspace.provider.AdProvider { *; }
-keepclassmembers class * implements com.admob.adspace.provider.AdProvider { *; }

# Keep sealed classes and their implementations
-keep class com.admob.adspace.event.AdEvent$* { *; }
-keep class com.admob.adspace.model.** { *; }

# Keep serialization classes
-keepclassmembers class com.admob.adspace.model.** { *; }

# Don't warn about missing classes
-dontwarn com.google.android.libraries.ads.**
-dontwarn com.google.android.gms.internal.**

-keepnames class com.admob.adspace.config.AdConfig
-if class com.admob.adspace.config.AdConfig
-keep class com.admob.adspace.config.AdConfigJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.admob.adspace.config.AdConfig
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-keepclassmembers class com.admob.adspace.config.AdConfig {
    public synthetic <init>(java.util.List,com.admob.adspace.config.GlobalConfig,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-keepnames class com.admob.adspace.config.AdSpaceConfig
-if class com.admob.adspace.config.AdSpaceConfig
-keep class com.admob.adspace.config.AdSpaceConfigJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.admob.adspace.config.AdSpaceConfig
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-keepclassmembers class com.admob.adspace.config.AdSpaceConfig {
    public synthetic <init>(java.lang.String,java.lang.String,java.util.List,boolean,long,boolean,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-keepnames class com.admob.adspace.config.GlobalConfig
-if class com.admob.adspace.config.GlobalConfig
-keep class com.admob.adspace.config.GlobalConfigJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.admob.adspace.config.GlobalConfig
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-keepclassmembers class com.admob.adspace.config.GlobalConfig {
    public synthetic <init>(boolean,boolean,long,int,kotlin.jvm.internal.DefaultConstructorMarker);
}
