requestEmailVerification method

Future<Map<String, dynamic>> requestEmailVerification(
  1. String email, {
  2. bool testMode = false,
})

Request email verification

Implementation

Future<Map<String, dynamic>> requestEmailVerification(String email, {bool testMode = false}) async {
  // Use both print and OnairosDebugHelper for maximum visibility
  print('🔍 [EMAIL-VERIFY] Starting requestEmailVerification for: $email (testMode: $testMode)');
  OnairosDebugHelper.log('📧 [EMAIL-VERIFY] Starting requestEmailVerification');
  OnairosDebugHelper.log('📧 [EMAIL-VERIFY] Email: $email, testMode: $testMode');
  try {
    OnairosDebugHelper.log('📧 Requesting email verification for: $email (testMode: $testMode)');
    print('📧 Requesting email verification for: $email (testMode: $testMode)');

    // Test mode mock response - NO ACTUAL EMAIL SENT
    if (testMode) {
      OnairosDebugHelper.log('🚀 Test mode: Skipping real email, returning mock success immediately');
      await Future.delayed(const Duration(milliseconds: 300));
      final mockRequestId = 'test-request-${DateTime.now().millisecondsSinceEpoch}';

      // Store request details for test mode
      await _storage.storeValue('email_verification_request_id', mockRequestId);
      await _storage.storeValue('email_verification_request_email', email);

      OnairosDebugHelper.log('✅ Test mode: Email verification mocked (NO EMAIL SENT)');
      return {
        'success': true,
        'message': 'Ready for verification (test mode - no email sent)',
        'requestId': mockRequestId,
        'testMode': true,
      };
    }

    // Live mode: Make authenticated API request
    print('🌐 [EMAIL-VERIFY] Making API call to: email/verification');
    print('🌐 [EMAIL-VERIFY] API Service initialized: ${_apiKeyService.isInitialized}');
    OnairosDebugHelper.log('🌐 Making API call to: email/verification');
    OnairosDebugHelper.log('📤 Request body: {email: $email, action: request}');
    print('📤 [EMAIL-VERIFY] Request body: {email: $email, action: request}');

    print('📡 [EMAIL-VERIFY] About to call authenticatedPost...');
    final response = await _apiKeyService.authenticatedPost(
      'email/verification',
      body: {
        'email': email,
        'action': 'request',
      },
    ).timeout(
      const Duration(seconds: 30),
      onTimeout: () {
        OnairosDebugHelper.log('⏱️ Request timeout after 30 seconds');
        throw TimeoutException('Request timed out after 30 seconds', const Duration(seconds: 30));
      },
    );

    OnairosDebugHelper.log('📥 API Response: $response');
    OnairosDebugHelper.log('📥 Response success: ${response['success']}');
    OnairosDebugHelper.log('📥 Response message: ${response['message']}');

    // Store request details for tracking
    if (response['success'] == true) {
      await _storage.storeValue('email_verification_request_id', response['requestId'] ?? 'unknown');
      await _storage.storeValue('email_verification_request_email', email);
      await _storage.storeValue('email_verification_request_timestamp', DateTime.now().toIso8601String());
      OnairosDebugHelper.log('✅ Email verification requested successfully');
    } else {
      OnairosDebugHelper.log('⚠️ API returned success=false: ${response['message'] ?? 'Unknown error'}');
    }

    return response;

  } catch (e, stackTrace) {
    print('❌ [EMAIL-VERIFY] EXCEPTION CAUGHT!');
    print('❌ Error: $e');
    print('❌ Type: ${e.runtimeType}');
    print('❌ Stack: $stackTrace');
    OnairosDebugHelper.log('❌ [EMAIL-VERIFY] Exception caught!');
    OnairosDebugHelper.log('❌ Error requesting email verification: $e');
    OnairosDebugHelper.log('❌ Error type: ${e.runtimeType}');
    OnairosDebugHelper.log('❌ Full stack trace: $stackTrace');

    // Extract more specific error message
    String errorMessage = 'Failed to send verification email. Please try again.';
    if (e.toString().contains('404')) {
      errorMessage = 'Email service endpoint not found. Please check backend configuration.';
    } else if (e.toString().contains('500')) {
      errorMessage = 'Backend server error. Please check backend logs.';
    } else if (e.toString().contains('timeout')) {
      errorMessage = 'Request timed out. Please check your internet connection.';
    }

    return {
      'success': false,
      'message': errorMessage,
      'error': e.toString(),
      'details': 'Check console logs for full error details',
    };
  }
}