initialize static method

Future<void> initialize()

Initialize VoIP service

Implementation

static Future<void> initialize() async {
  try {
    // Cancel existing subscription if any
    await _eventSubscription?.cancel();

    // Set up event listener
    _eventSubscription = FlutterCallkitIncoming.onEvent.listen((event) async {
      try {
        if (event == null) {
          debugPrint('VoIP: Received null event');
          return;
        }

        debugPrint('═══════════════════════════════════════');
        debugPrint('📞 CALLKIT EVENT RECEIVED');
        debugPrint('═══════════════════════════════════════');
        debugPrint('Event: ${event.event}');
        if (event.body != null) {
          debugPrint('Body: ${event.body}');
        }
        debugPrint('═══════════════════════════════════════');

        switch (event.event) {
      case Event.actionCallIncoming:
        debugPrint('📥 CallKit: Incoming call received');
        debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
        debugPrint('👤 Caller: ${event.body?['nameCaller'] ?? 'Unknown'}');
        debugPrint('📱 Number: ${event.body?['handle'] ?? 'Unknown'}');
        break;
      case Event.actionCallStart:
        debugPrint('🚀 CallKit: Call started');
        debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
        break;
      case Event.actionCallAccept:
        debugPrint('✅ CallKit: Call accepted');
        debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
        // Answer SIP call if active
        if (SipService.isInCall) {
          try {
            await SipService.answerCall();
          } catch (e) {
            debugPrint('VoIP: Error answering SIP call: $e');
          }
        }
        await _onCallAccepted(event);
        break;
      case Event.actionCallDecline:
        debugPrint('❌ CallKit: Call declined');
        debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
        // Hangup SIP call if active
        if (SipService.isInCall) {
          try {
            debugPrint('📞 Hanging up SIP call...');
            await SipService.hangup();
          } catch (e) {
            debugPrint('VoIP: Error hanging up SIP call: $e');
          }
        }
        await _onCallDeclined(event);
        break;
      case Event.actionCallEnded:
        debugPrint('❌ CallKit: Call ended');
        debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
        // Hangup SIP call if active
        if (SipService.isInCall) {
          try {
            debugPrint('📞 Hanging up SIP call...');
            await SipService.hangup();
          } catch (e) {
            debugPrint('VoIP: Error hanging up SIP call: $e');
          }
        }
        await _onCallEnded(event);
        break;
      case Event.actionCallTimeout:
        debugPrint('⏱️ CallKit: Call timeout');
        debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
        await _onCallTimeout(event);
        break;
      case Event.actionCallCallback:
        debugPrint('VoIP: Callback action');
        break;
      case Event.actionCallToggleHold:
        debugPrint('VoIP: Toggle hold');
        break;
      case Event.actionCallToggleMute:
        debugPrint('VoIP: Toggle mute');
        break;
      case Event.actionCallToggleDmtf:
        debugPrint('VoIP: Toggle DTMF');
        break;
      case Event.actionCallToggleGroup:
        debugPrint('VoIP: Toggle group');
        break;
      case Event.actionCallToggleAudioSession:
        debugPrint('VoIP: Toggle audio session');
        break;
      default:
        debugPrint('VoIP: Unknown event - ${event.event}');
        break;
      }
      } catch (e, stackTrace) {
        _printException('VoIP Event Handler', e, stackTrace);
      }
    });

    debugPrint('VoIP: Service initialized');
  } catch (e, stackTrace) {
    _printException('VoIP Initialize', e, stackTrace);
    rethrow;
  }
}