# Consumer rules for Easypay Tool SDK
# These rules will be automatically applied to projects that use this SDK
# ONLY the public API should be preserved for consumers - internal classes are COMPLETELY HIDDEN

# =============================================================================
# PUBLIC API PRESERVATION ONLY (sdk/ package)
# =============================================================================

# Keep the public API of EasyTool SDK - preserve all public methods including companion object
-keep public class sa.easypay.toolsdk.sdk.EasyTool {
    public *;
    public static *;
}

# Specifically preserve companion object methods for consumer apps
-keep public class sa.easypay.toolsdk.sdk.EasyTool$Companion {
    public static ** initialize(...);
    public static ** selectPrinter(...);
    public static ** printText(...);
    public static ** printBytes(...);
    public static ** printImage(...);
    public static ** openCashDrawer(...);
    public static ** signOut(...);
    public static ** cleanup(...);
    public static ** isInitialized(...);
    public static ** updateSubscription(...);
}

# Keep public interfaces and listeners in SDK package
-keep public interface sa.easypay.toolsdk.sdk.** {
    public *;
}

# Keep @JvmStatic methods explicitly for consumer apps
-keepclassmembers class sa.easypay.toolsdk.sdk.EasyTool$Companion {
    @kotlin.jvm.JvmStatic public *;
}

# =============================================================================
# INTERNAL PACKAGE COMPLETE HIDING FOR CONSUMERS
# =============================================================================

# COMPLETELY HIDE all internal implementation from consumer apps
# Internal classes should be INVISIBLE and INACCESSIBLE

# Don't warn about internal classes (they are intentionally hidden)
-dontwarn sa.easypay.toolsdk.internal.**

# Don't warn about obfuscated/repackaged internal classes
-dontwarn a.**

# Consumer apps should NEVER be able to access internal classes
-dontnote sa.easypay.toolsdk.internal.**

# Hide any references to internal packages
-assumenosideeffects class sa.easypay.toolsdk.internal.** {
    *;
}

# =============================================================================
# ANDROID FRAMEWORK REQUIREMENTS
# =============================================================================

# Keep Parcelable implementations (if any exist in the public API)
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

# Keep native methods (if any exist in the public API)
-keepclasseswithmembernames class * {
    native <methods>;
}

# Keep enum values (if any exist in the public API)
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# =============================================================================
# RESOURCE HIDING - SDK RESOURCES ARE NOT ACCESSIBLE TO CONSUMERS
# =============================================================================

# SDK resources are internal and should not be accessible to consumer apps
# This prevents resource conflicts and keeps SDK implementation hidden
-dontwarn sa.easypay.toolsdk.R$*
-dontnote sa.easypay.toolsdk.R$*

# Don't expose any SDK resource references to consumers
-assumenosideeffects class sa.easypay.toolsdk.R$* {
    <fields>;
}
