import 'dart:convert'; import 'package:http/http.dart' as http; import '../config/app_config.dart'; import 'auth_service.dart'; class ReviewService { final AuthService _authService = AuthService(); Map get _headers { final headers = { 'Content-Type': 'application/json', 'Accept': 'application/json', }; if (_authService.token != null) { headers['Authorization'] = 'Bearer ${_authService.token}'; } return headers; } // Add review for kontrakan Future> addKontrakanReview({ required int kontrakanId, required double rating, required String comment, }) async { try { final response = await http.post( Uri.parse('${AppConfig.baseUrl}/reviews/kontrakan/$kontrakanId'), headers: _headers, body: jsonEncode({'rating': rating, 'comment': comment}), ); final data = jsonDecode(response.body); if (response.statusCode == 401) { await _authService.handleUnauthorized(response.statusCode); return { 'success': false, 'message': 'Sesi expired, silakan login ulang', }; } if (response.statusCode == 201 && data['success'] == true) { return { 'success': true, 'message': data['message'] ?? 'Review berhasil ditambahkan', 'data': data['data'], }; } else { return { 'success': false, 'message': data['message'] ?? 'Gagal menambahkan review', 'errors': data['errors'], }; } } catch (e) { return {'success': false, 'message': 'Error: $e'}; } } // Add review for laundry Future> addLaundryReview({ required int laundryId, required double rating, required String comment, }) async { try { final response = await http.post( Uri.parse('${AppConfig.baseUrl}/reviews/laundry/$laundryId'), headers: _headers, body: jsonEncode({'rating': rating, 'comment': comment}), ); final data = jsonDecode(response.body); if (response.statusCode == 401) { await _authService.handleUnauthorized(response.statusCode); return { 'success': false, 'message': 'Sesi expired, silakan login ulang', }; } if (response.statusCode == 201 && data['success'] == true) { return { 'success': true, 'message': data['message'] ?? 'Review berhasil ditambahkan', 'data': data['data'], }; } else { return { 'success': false, 'message': data['message'] ?? 'Gagal menambahkan review', 'errors': data['errors'], }; } } catch (e) { return {'success': false, 'message': 'Error: $e'}; } } // Update review Future> updateReview({ required int reviewId, required double rating, required String comment, }) async { try { final response = await http.put( Uri.parse('${AppConfig.baseUrl}/reviews/$reviewId'), headers: _headers, body: jsonEncode({'rating': rating, 'comment': comment}), ); final data = jsonDecode(response.body); if (response.statusCode == 401) { await _authService.handleUnauthorized(response.statusCode); return { 'success': false, 'message': 'Sesi expired, silakan login ulang', }; } if (response.statusCode == 200 && data['success'] == true) { return { 'success': true, 'message': data['message'] ?? 'Review berhasil diperbarui', 'data': data['data'], }; } else { return { 'success': false, 'message': data['message'] ?? 'Gagal memperbarui review', 'errors': data['errors'], }; } } catch (e) { return {'success': false, 'message': 'Error: $e'}; } } // Delete review Future> deleteReview(int reviewId) async { try { final response = await http.delete( Uri.parse('${AppConfig.baseUrl}/reviews/$reviewId'), headers: _headers, ); final data = jsonDecode(response.body); if (response.statusCode == 401) { await _authService.handleUnauthorized(response.statusCode); return { 'success': false, 'message': 'Sesi expired, silakan login ulang', }; } if (response.statusCode == 200 && data['success'] == true) { return { 'success': true, 'message': data['message'] ?? 'Review berhasil dihapus', }; } else { return { 'success': false, 'message': data['message'] ?? 'Gagal menghapus review', }; } } catch (e) { return {'success': false, 'message': 'Error: $e'}; } } }