# ===================================================================
# Daro M SDK Consumer ProGuard Rules
# ===================================================================
# These rules are automatically applied to apps using this SDK.
# App developers can override these rules in their own proguard-rules.pro
# ===================================================================

# -------------------------------------------------------------------
# Daro SDK Public API
# -------------------------------------------------------------------

# Entry Point
-keep public class droom.daro.m.Daro { public *; }

# AndroidX Startup Initializer
-keep class droom.daro.m.DaroInitializer { *; }

# App Open Ad Manager (public API)
-keep public class droom.daro.m.appopen.DaroAppOpenAdManager { public *; }
-keep public class droom.daro.m.appopen.DaroAppOpenAdManager$Builder { public *; }

# SDK Configuration
-keep public class droom.daro.SDKConfig { *; }
-keep public class droom.daro.SDKConfig$Builder { *; }

# Listeners (all public interfaces)
-keep public interface droom.daro.core.listener.** { *; }

# Ad Units (all public)
-keep public class droom.daro.core.adunit.** { *; }

# Loaders (public API)
-keep public class droom.daro.loader.** {
    public protected *;
}

# Views (public API)
-keep public class droom.daro.view.** {
    public protected *;
}

# Models - Public classes only (excludes internal like AdUnitInfo)
-keep public class droom.daro.core.model.DaroAd { *; }
-keep public class droom.daro.core.model.DaroAd$* { *; }
-keep public class droom.daro.core.model.DaroViewAd { *; }
-keep public class droom.daro.core.model.DaroInterstitialAd { *; }
-keep public class droom.daro.core.model.DaroAppOpenAd { *; }
-keep public class droom.daro.core.model.DaroRewardedAd { *; }
-keep public class droom.daro.core.model.DaroRewardedAd$* { *; }
-keep public class droom.daro.core.model.DaroLightPopupAd { *; }
-keep public class droom.daro.core.model.DaroNativeAd { *; }
-keep public class droom.daro.core.model.DaroAdInfo { *; }
-keep public class droom.daro.core.model.DaroAdLoadError { *; }
-keep public class droom.daro.core.model.DaroAdDisplayFailError { *; }
-keep public class droom.daro.core.model.DaroNativeAdBinder { *; }
-keep public class droom.daro.core.model.DaroNativeAdBinder$* { *; }
-keep public class droom.daro.core.model.DaroBannerSize { *; }
-keep public class droom.daro.core.model.DaroMediationType { *; }
-keep public class droom.daro.core.model.DaroNativeAdChoicePlacement { *; }
-keep public class droom.daro.core.model.DaroLightPopupAdOptions { *; }
-keep public class droom.daro.core.model.nativetemplate.** { *; }

# -------------------------------------------------------------------
# Ad Network SDKs
# -------------------------------------------------------------------

# Pangle (ByteDance)
-keep class com.bytedance.sdk.** { *; }

# Amazon APS
-keep class com.amazon.** { *; }

# IronSource
-keepclassmembers class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
-keep class com.ironsource.adapters.** { *; }
-dontwarn com.ironsource.**
-dontwarn com.ironsource.adapters.**
-keepclassmembers class com.ironsource.** { public *; }
-keep public class com.ironsource.**
-keep class com.ironsource.adapters.** { *; }

# IronSource - AppLovin integration
-keepclassmembers class com.applovin.sdk.AppLovinSdk { static *; }
-keep public interface com.applovin.sdk.** { *; }
-keep public interface com.applovin.adview.** { *; }
-keep public interface com.applovin.mediation.** { *; }
-keep public interface com.applovin.communicator.** { *; }

# IronSource - AndroidX
-keep class androidx.localbroadcastmanager.content.LocalBroadcastManager { *; }
-keep class androidx.recyclerview.widget.RecyclerView { *; }
-keep class androidx.recyclerview.widget.RecyclerView$OnScrollListener { *; }

# IronSource - Android
-keep class * extends android.app.Activity

# -------------------------------------------------------------------
# Internal Dependencies (Reflection-based)
# -------------------------------------------------------------------

# Room Database - Entity classes for reflection
-keep class droom.daro.core.data.database.*Entity { *; }
-keep class droom.daro.core.data.database.*Database { *; }

# Retrofit
-keep,allowobfuscation,allowshrinking interface retrofit2.Call
-keep,allowobfuscation,allowshrinking class retrofit2.Response

# kotlinx.serialization (SDK 내부 DTO 직렬화에 사용)
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** {
    *** Companion;
}
-keepclasseswithmembers class kotlinx.serialization.json.** {
    kotlinx.serialization.KSerializer serializer(...);
}
-keepclassmembers @kotlinx.serialization.Serializable class droom.daro.core.data.network.model.** {
    *** Companion;
    *** INSTANCE;
    kotlinx.serialization.KSerializer serializer(...);
}

# Kotlin Coroutines
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
