// lib/features/booking/services/payment_service.dart import 'package:razorpay_flutter/razorpay_flutter.dart'; import 'package:flutter/foundation.dart'; typedef PaymentSuccessCallback = void Function(PaymentSuccessResponse response); typedef PaymentErrorCallback = void Function(PaymentFailureResponse response); typedef ExternalWalletCallback = void Function(ExternalWalletResponse response); class PaymentService { late Razorpay _razorpay; // Razorpay test key — matches web app static const String _testKey = 'rzp_test_S49PVZmqAVoWSH'; PaymentSuccessCallback? onSuccess; PaymentErrorCallback? onError; ExternalWalletCallback? onExternalWallet; void initialize({ required PaymentSuccessCallback onSuccess, required PaymentErrorCallback onError, ExternalWalletCallback? onExternalWallet, }) { _razorpay = Razorpay(); this.onSuccess = onSuccess; this.onError = onError; this.onExternalWallet = onExternalWallet; _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handleSuccess); _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handleError); _razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet); } void openPayment({ required double amount, required String email, required String phone, required String eventName, String? orderId, }) { final options = { 'key': _testKey, 'amount': (amount * 100).toInt(), // paise 'currency': 'INR', 'name': 'Eventify', 'description': 'Ticket: $eventName', 'prefill': { 'email': email, 'contact': phone, }, 'theme': {'color': '#0B63D6'}, }; if (orderId != null) options['order_id'] = orderId; if (kDebugMode) debugPrint('PaymentService: opening Razorpay with amount=${amount * 100} paise'); _razorpay.open(options); } void _handleSuccess(PaymentSuccessResponse res) => onSuccess?.call(res); void _handleError(PaymentFailureResponse res) => onError?.call(res); void _handleExternalWallet(ExternalWalletResponse res) => onExternalWallet?.call(res); void dispose() { _razorpay.clear(); } }