import 'package:razorpay_flutter/razorpay_flutter.dart';
import 'package:flutter/foundation.dart';

class RazorpayService {
  late Razorpay _razorpay;
  final Function(PaymentSuccessResponse)? onSuccess;
  final Function(PaymentFailureResponse)? onFailure;
  final Function(ExternalWalletResponse)? onExternalWallet;

  RazorpayService({
    this.onSuccess,
    this.onFailure,
    this.onExternalWallet,
  }) {
    _razorpay = Razorpay();
    _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
    _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
    _razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet);
  }

  void _handlePaymentSuccess(PaymentSuccessResponse response) {
    debugPrint("✅ Razorpay Payment Success: ${response.paymentId}");
    onSuccess?.call(response);
  }

  void _handlePaymentError(PaymentFailureResponse response) {
    debugPrint("❌ Razorpay Payment Error: ${response.code} - ${response.message}");
    onFailure?.call(response);
  }

  void _handleExternalWallet(ExternalWalletResponse response) {
    debugPrint("💰 Razorpay External Wallet: ${response.walletName}");
    onExternalWallet?.call(response);
  }

  void openCheckout({
    required String key,
    required dynamic amount,
    required String orderId,
    required String description,
    String? contact,
    String? email,
  }) {
    var options = {
      'key': key,
      'amount': amount,
      'name': 'Taxglide',
      'order_id': orderId,
      'description': description,
      'theme': {'color': '#61277A'},
      'prefill': {
        'contact': contact ?? '',
        'email': email ?? '',
      },
      'external': {
        'wallets': ['paytm']
      }
    };

    try {
      _razorpay.open(options);
    } catch (e) {
      debugPrint("❌ Error opening Razorpay: $e");
    }
  }

  void dispose() {
    _razorpay.clear();
  }
}
