import 'dart:convert'; import 'dart:io'; import 'package:dio/dio.dart'; import 'package:flutter/foundation.dart'; class ApiService { // Use 10.0.2.2 for Android Emulator, localhost for iOS/Web static final String baseUrl = Platform.isAndroid ? 'http://10.0.2.2:3000' : 'http://localhost:3000'; final Dio _dio = Dio( BaseOptions( baseUrl: baseUrl, connectTimeout: const Duration(seconds: 10), receiveTimeout: const Duration(seconds: 10), ), ); // Get Initial Master Data (Groups, Species, Breeds, Diseases) Future> getInitialData() async { try { final response = await _dio.get('/common/initial-data'); return response.data; } catch (e) { debugPrint('Error fetching initial data: $e'); rethrow; } } // Register Pet Future> registerPet({ required int userId, required String name, required String species, required String breed, required String gender, required bool isNeutered, DateTime? birthDate, required bool isDateUnknown, double? weight, String? registrationNumber, File? profileImage, List? diseases, List? pastDiseases, List? healthConcerns, }) async { try { final formData = FormData.fromMap({ 'userId': userId, 'name': name, 'species': species, 'breed': breed, 'gender': gender, // "남아", "여아", "기타" 'isNeutered': isNeutered, 'birthDate': birthDate?.toIso8601String(), 'isDateUnknown': isDateUnknown, 'weight': weight, 'registrationNumber': registrationNumber, 'diseases': diseases != null ? jsonEncode(diseases) : '[]', 'pastDiseases': pastDiseases != null ? jsonEncode(pastDiseases) : '[]', 'healthConcerns': healthConcerns != null ? jsonEncode(healthConcerns) : '[]', if (profileImage != null) 'profileImage': await MultipartFile.fromFile( profileImage.path, filename: profileImage.path.split('/').last, ), }); final response = await _dio.post('/pets', data: formData); return response.data; } catch (e) { debugPrint('Error registering pet: $e'); rethrow; } } // Update Pet Future> updatePet({ required int petId, required String name, required String species, required String breed, required String gender, required bool isNeutered, DateTime? birthDate, required bool isDateUnknown, double? weight, String? registrationNumber, File? profileImage, List? diseases, List? pastDiseases, List? healthConcerns, }) async { try { final formData = FormData.fromMap({ 'name': name, 'species': species, 'breed': breed, 'gender': gender, 'isNeutered': isNeutered, 'birthDate': birthDate?.toIso8601String(), 'isDateUnknown': isDateUnknown, 'weight': weight, 'registrationNumber': registrationNumber, 'diseases': diseases != null ? jsonEncode(diseases) : '[]', 'pastDiseases': pastDiseases != null ? jsonEncode(pastDiseases) : '[]', 'healthConcerns': healthConcerns != null ? jsonEncode(healthConcerns) : '[]', if (profileImage != null) 'profileImage': await MultipartFile.fromFile( profileImage.path, filename: profileImage.path.split('/').last, ), }); final response = await _dio.put('/pets/$petId', data: formData); return response.data; } catch (e) { debugPrint('Error updating pet: $e'); rethrow; } } // Get Pets Future> getPets(int userId) async { try { final response = await _dio.get( '/pets', queryParameters: {'userId': userId}, ); return response.data; } catch (e) { debugPrint('Error fetching pets: $e'); rethrow; } } }