# ============================================================================
# Gate2 eSIM SDK - Consumer ProGuard Rules
# ============================================================================
# Applied automatically to host apps. eSIM ships pre-minified.
# Only keep what the host app directly references.

# ============================================================================
# PUBLIC API — Core (embedded in eSIM AAR)
# ============================================================================

# Main SDK entry point (host calls initialize, notifyPaymentResult, etc.)
-keep public class com.gate2.sdk.core.Gate2TravelSdk {
    public static void initialize(com.gate2.sdk.core.config.Gate2SdkConfig);
    public static boolean isInitialized();
    public static void notifyPaymentResult(java.lang.String);
    public static void updateTheme(com.gate2.sdk.core.config.Gate2Theme);
    public static com.gate2.sdk.core.Gate2TravelSdk getInstance();
    public java.lang.String getVersion();
    public com.gate2.sdk.core.config.Gate2SdkConfig getConfig();
    public java.lang.String getUserId();
    public void setUserId(java.lang.String);
    public java.lang.String getEmail();
    public java.lang.String getSessionId();
    public void setSessionId(java.lang.String);
}

# SDK Configuration (host app constructs these via builders)
-keep public class com.gate2.sdk.core.config.Gate2SdkConfig {
    public static com.gate2.sdk.core.config.Gate2SdkConfig$Builder builder();
}
-keep public class com.gate2.sdk.core.config.Gate2SdkConfig$Builder { public <methods>; }
-keep public class com.gate2.sdk.core.config.Gate2Theme { *; }
-keep public class com.gate2.sdk.core.config.Gate2Theme$Builder { *; }
-keep public class com.gate2.sdk.core.config.Gate2Theme$Companion { *; }
-keep public class com.gate2.sdk.core.config.PrimaryColors { *; }
-keep public class com.gate2.sdk.core.config.PrimaryColors$Builder { *; }
-keep public class com.gate2.sdk.core.config.SecondaryColors { *; }
-keep public class com.gate2.sdk.core.config.SecondaryColors$Builder { *; }
-keep public class com.gate2.sdk.core.config.BackgroundColors { *; }
-keep public class com.gate2.sdk.core.config.BackgroundColors$Builder { *; }
-keep public class com.gate2.sdk.core.config.TextColors { *; }
-keep public class com.gate2.sdk.core.config.TextColors$Builder { *; }
-keep public class com.gate2.sdk.core.config.StatusColors { *; }
-keep public class com.gate2.sdk.core.config.StatusColors$Builder { *; }

# Payment API (host app receives these via callbacks)
-keep public class com.gate2.sdk.core.api.PaymentRequest { *; }
-keep public class com.gate2.sdk.core.api.PaymentResult { *; }
-keep public class com.gate2.sdk.core.api.PaymentResult$* { *; }

# Module system (needed for reflection-based loading)
-keep public class com.gate2.sdk.core.module.ModuleId { *; }

# Design system (host may reference for theming)
-keep public class com.gate2.sdk.core.design.Gate2Colors { *; }

# ============================================================================
# PUBLIC API — eSIM Module
# ============================================================================

# eSIM facade (host calls Gate2Esim.start() / resumeAfterPayment())
-keep public class com.gate2.sdk.esim.Gate2Esim { *; }

# Callbacks (host instantiates this)
-keep public class com.gate2.sdk.esim.EsimCallbacks { *; }

# Payment request (host receives via callback)
-keep public class com.gate2.sdk.esim.api.EsimPaymentRequest { *; }
-keep public class com.gate2.sdk.esim.api.EsimProductSummary { *; }

# Error types (host catches/handles these)
-keep public class com.gate2.sdk.esim.api.EsimError { *; }
-keep public class com.gate2.sdk.esim.api.EsimErrorCode { *; }
-keep public class com.gate2.sdk.esim.api.EsimException { *; }

# Composable entry points (alternative to Activity-based flow)
-keep public class com.gate2.sdk.esim.Gate2EsimScreenKt {
    public static void Gate2EsimScreen(...);
}
-keep public class com.gate2.sdk.esim.Gate2EsimResumeScreenKt {
    public static void Gate2EsimResumeScreen(...);
}

# Module class (loaded via Class.forName + kotlin.objectInstance)
-keep class com.gate2.sdk.esim.internal.EsimModule { *; }
