# -----------------------------------------------------------------------
# Novvy Ads SDK - Consumer ProGuard Rules
# These rules are automatically applied to apps that integrate this SDK.
# -----------------------------------------------------------------------

# --- Public API ---
-keep public class ai.novvy.android.sdk.NovvySDK { *; }
-keep public class ai.novvy.android.sdk.NovvyError { *; }
# Keep sealed subtypes (NovvyError$InternalError, etc.) as well.
-keep public class ai.novvy.android.sdk.NovvyError$* { *; }
-keep public class ai.novvy.android.sdk.NovvyContentContext { *; }
-keep public interface ai.novvy.android.sdk.NovvyPlayerAdapter { *; }
-keep class ai.novvy.android.sdk.NovvyDramaRecord { *; }
-keep class ai.novvy.android.sdk.NovvyUserContext { *; }

# Orthogonal taxonomy
-keep class ai.novvy.android.sdk.AdFormat { *; }
-keep class ai.novvy.android.sdk.Placement { *; }
-keep class ai.novvy.android.sdk.CreativeType { *; }
-keep public class ai.novvy.android.sdk.NovvyAdSize { *; }

# Public ad entry points (single atomic layer)
-keep public class ai.novvy.android.sdk.NovvyInterstitialAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyInterstitialAdListener { *; }
-keep public class ai.novvy.android.sdk.NovvyRewardedAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyRewardedAdListener { *; }
-keep public class ai.novvy.android.sdk.NovvyScrollAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyScrollAdListener { *; }
-keep public class ai.novvy.android.sdk.NovvyMidAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyMidAdListener { *; }
-keep public class ai.novvy.android.sdk.NovvyEndAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyEndAdListener { *; }
-keep public class ai.novvy.android.sdk.NovvyPauseAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyPauseAdListener { *; }
-keep public class ai.novvy.android.sdk.NovvyInsertAd { *; }
-keep public interface ai.novvy.android.sdk.NovvyInsertAdListener { *; }

# Cross-platform STORY bridge. Undocumented (absent from docs/api.md) but genuinely public: the
# Flutter / RN wrappers compile against this AAR, so R8 must not rename or strip it.
-keep public class ai.novvy.android.sdk.NovvyStoryPlayerBridge { *; }
-keep public interface ai.novvy.android.sdk.NovvyStoryPlayerCommands { *; }

# --- JavaScript Bridge ---
# Prevents R8 from renaming @JavascriptInterface methods used by ad creatives
-keepclassmembers class ai.novvy.android.sdk.Internal.render.WebViewCreativeRenderer$JsBridge {
    @android.webkit.JavascriptInterface <methods>;
}

# --- Kotlinx Serialization ---
# Required for bid request/response JSON parsing to work correctly
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.**
-keepclassmembers @kotlinx.serialization.Serializable class ai.novvy.android.sdk.** { *; }
