# ProGuard rules for UNSPOOLED
# ── Serialization ──
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** { *** Companion; }
-keepclasseswithmembers class kotlinx.serialization.json.** { kotlinx.serialization.KSerializer serializer(...); }
-keep,includedescriptorclasses class com.unspooled.app.**$$serializer { *; }
-keepclassmembers class com.unspooled.app.** { *** Companion; }
-keepclasseswithmembers class com.unspooled.app.** { kotlinx.serialization.KSerializer serializer(...); }

# ── Retrofit + OkHttp ──
-keepattributes Signature
-keepattributes Exceptions
-keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* <methods>; }
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn javax.annotation.**
-dontwarn kotlin.Unit
-dontwarn retrofit2.KotlinExtensions
-dontwarn retrofit2.KotlinExtensions$*
-dontwarn okhttp3.**
-dontwarn okio.**

# ── Room ──
-keep class * extends androidx.room.RoomDatabase
-dontwarn androidx.room.paging.**

# ── Hilt / DI ──
-keep class dagger.hilt.** { *; }
-keep class javax.inject.** { *; }
-keep class * extends dagger.hilt.android.internal.managers.ViewComponentManager$FragmentContextWrapper { *; }

# ── Coil (image loading) ──
-keep class coil3.** { *; }
-dontwarn coil3.PlatformContext

# ── Gson (used in AddonRepository manifest cache) ──
-keepattributes com.google.gson.stream.**,com.google.gson.annotations.**
-keep class com.google.gson.** { *; }
-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
-dontwarn com.google.gson.**

# ── Media3 / ExoPlayer ──
# ExoPlayer uses reflection for renderer discovery and codec enumeration.
# Without these rules, release builds will crash on playback start.
-keep class androidx.media3.** { *; }
-dontwarn androidx.media3.**
-keep class com.google.android.exoplayer2.** { *; }
-dontwarn com.google.android.exoplayer2.**

# ── Jetpack Compose ──
# Compose compiler generates synthetic methods accessed via reflection
-keep class androidx.compose.** { *; }
-dontwarn androidx.compose.**
-keepclassmembers class * {
    @androidx.compose.runtime.Composable <methods>;
}

# ── NanoHTTPD (addon config server) ──
-keep class fi.iki.elonen.** { *; }
-dontwarn fi.iki.elonen.**

# ── ViewModels with @HiltViewModel (reflective access) ──
-keep class * extends androidx.lifecycle.ViewModel { *; }
-keepclassmembers class * extends androidx.lifecycle.ViewModel {
    <init>(...);
}

# ── Kotlin coroutines ──
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepclassmembers class kotlinx.coroutines.** {
    volatile <fields>;
}

# ── Gson serialization — data models ──
# Keep fields for models serialized via Gson/JSON.
-keepclassmembers class com.unspooled.app.domain.model.DebridSettings { *; }
-keepclassmembers class com.unspooled.app.domain.model.DebridStreamPreferences { *; }

