using System; using UnityEngine; #if SHIROGIN_IAP using UnityEngine.Purchasing; #endif namespace ShiroginSDK.Runtime.Modules.Events { #if SHIROGIN_IAP public static partial class ShiroginEvents { public static class IAP { /// /// Fired when an in-app purchase is successfully completed. /// Contains both logical and analytical data for tracking and rewards. /// [Serializable] public class PurchaseCompletedEvent { public int Quantity; public string TransactionId; public string PaymentType; public Product Product; public DateTime Timestamp; public PurchaseCompletedEvent(Product product, int quantity = 1) { Product = product; Quantity = quantity; TransactionId = product?.transactionID ?? Guid.NewGuid().ToString(); PaymentType = Application.platform == RuntimePlatform.Android ? "Google Play" : "App Store"; Timestamp = DateTime.UtcNow; } // Computed properties public string ItemId => Product?.definition?.id ?? "undefined"; public string ItemName => Product?.metadata?.localizedTitle ?? "undefined"; public string ItemCategory => Product?.definition?.type.ToString() ?? "unknown"; public double Price => (double)(Product?.metadata?.localizedPrice ?? 0); public double Revenue => Price * Quantity; public string Currency => Product?.metadata?.isoCurrencyCode ?? "USD"; public override string ToString() { return $"[PurchaseCompletedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} x{Quantity} | {PaymentType} | {TransactionId}"; } } /// /// Fired when an in-app purchase fails. /// Used for error handling, analytics, and failure reporting. /// [Serializable] public class PurchaseFailedEvent { public string Error; public string FailureReason; public string PaymentType; public Product Product; public DateTime Timestamp; public PurchaseFailedEvent(Product product, string error, string reason = "") { Product = product; Error = error; FailureReason = reason; PaymentType = Application.platform == RuntimePlatform.Android ? "Google Play" : "App Store"; Timestamp = DateTime.UtcNow; } // Computed properties public string ItemId => Product?.definition?.id ?? "undefined"; public string ItemName => Product?.metadata?.localizedTitle ?? "undefined"; public string ItemCategory => Product?.definition?.type.ToString() ?? "unknown"; public double Price => (double)(Product?.metadata?.localizedPrice ?? 0); public string Currency => Product?.metadata?.isoCurrencyCode ?? "USD"; public override string ToString() { return $"[PurchaseFailedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} | Error={Error} | Reason={FailureReason}"; } } } } #else public static partial class ShiroginEvents { public static class IAP { /// /// Fired when an in-app purchase is successfully completed. /// Contains both logical and analytical data for tracking and rewards. /// [Serializable] public class PurchaseCompletedEvent { public int Quantity; public string TransactionId; public string PaymentType; public Product Product; public DateTime Timestamp; public PurchaseCompletedEvent(Product product, int quantity = 1) { Product = product; Quantity = quantity; // TransactionId = product?.transactionID ?? Guid.NewGuid().ToString(); PaymentType = Application.platform == RuntimePlatform.Android ? "Google Play" : "App Store"; Timestamp = DateTime.UtcNow; } // Computed properties public string ItemId => "Dummy ItemId"; public string ItemName => "Dummy ItemName"; public string ItemCategory => "Dummy ItemCategory"; public double Price => 1d; public double Revenue => 1d; public string Currency => "Dummy Currency"; public override string ToString() { return $"[PurchaseCompletedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} x{Quantity} | {PaymentType} | {TransactionId}"; } } [Serializable] public class Product { } [Serializable] public class ProductMetadata { } [Serializable] public class ProductDefinition { } /// /// Fired when an in-app purchase fails. /// Used for error handling, analytics, and failure reporting. /// [Serializable] public class PurchaseFailedEvent { public string Error; public string FailureReason; public string PaymentType; public Product Product; public DateTime Timestamp; public PurchaseFailedEvent(Product product, string error, string reason = "") { Product = product; Error = error; FailureReason = reason; PaymentType = Application.platform == RuntimePlatform.Android ? "Google Play" : "App Store"; Timestamp = DateTime.UtcNow; } // Computed properties public string ItemId => "Dummy ItemID"; public string ItemName => "Dummy ItemName"; public string ItemCategory => "Dummy ItemCategory"; public double Price => 1; public string Currency =>"Dummy Currency"; public override string ToString() { return $"[PurchaseFailedEvent] {ItemName} ({ItemId}) | {Price:F2} {Currency} | Error={Error} | Reason={FailureReason}"; } } } } #endif }