import 'dart:convert'; import 'package:http/http.dart' as http; class ApiService { static const String _baseUrl = 'https://otp.intaleqapp.com/api/'; static const String _appKey = 'f3a9e7c1b8d5f2a4c6e9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1'; /// Request an OTP to be sent to the given phone number /// Returns a map with {success, expires_in, method} static Future> requestOtp( String phone, String deviceType, ) async { try { final response = await http .post( Uri.parse('${_baseUrl}request-otp.php'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({ 'phone': phone, 'device_type': deviceType, 'app_key': _appKey, }), ) .timeout(const Duration(seconds: 30)); if (response.statusCode == 200) { final data = jsonDecode(response.body) as Map; return { 'success': data['success'] ?? false, 'expires_in': data['expires_in'] ?? 120, 'method': data['method'] ?? 'flash_call', }; } else { final data = jsonDecode(response.body) as Map; return { 'success': false, 'expires_in': 0, 'method': 'flash_call', 'message': data['message'] ?? 'Server error: ${response.statusCode}', }; } } on http.ClientException catch (e) { return { 'success': false, 'expires_in': 0, 'method': 'flash_call', 'message': 'Network error: ${e.message}', }; } on FormatException { return { 'success': false, 'expires_in': 0, 'method': 'flash_call', 'message': 'Invalid server response', }; } catch (e) { return { 'success': false, 'expires_in': 0, 'method': 'flash_call', 'message': 'Connection error: $e', }; } } /// Verify an OTP code for the given phone number /// Returns a map with {success, message} static Future> verifyOtp( String phone, String otp, ) async { try { final response = await http .post( Uri.parse('${_baseUrl}verify-otp.php'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'phone': phone, 'otp': otp, 'app_key': _appKey}), ) .timeout(const Duration(seconds: 30)); if (response.statusCode == 200) { final data = jsonDecode(response.body) as Map; return { 'success': data['success'] ?? false, 'message': data['message'] ?? 'Verification completed', }; } else { final data = jsonDecode(response.body) as Map; return { 'success': false, 'message': data['message'] ?? 'Server error: ${response.statusCode}', }; } } on http.ClientException catch (e) { return {'success': false, 'message': 'Network error: ${e.message}'}; } on FormatException { return {'success': false, 'message': 'Invalid server response'}; } catch (e) { return {'success': false, 'message': 'Connection error: $e'}; } } }