import '../../core/api/api_client.dart'; class PublicApi { PublicApi(this._client); final ApiClient _client; Future>> discover({ String? city, String? q, double? minRating, String? sort, }) async { final params = {}; if (city != null && city.isNotEmpty) params['city'] = city; if (q != null && q.isNotEmpty) params['q'] = q; if (minRating != null) params['minRating'] = minRating.toString(); if (sort != null && sort.isNotEmpty) params['sort'] = sort; final res = await _client.dio.get>( '/api/public/discover', queryParameters: params.isEmpty ? null : params, ); final list = res.data?['data'] as List? ?? []; return list.cast>(); } Future>> getReviews(String slug, {int page = 1}) async { final res = await _client.dio.get>( '/api/public/cafes/$slug/reviews', queryParameters: {'page': page, 'pageSize': 20}, ); final list = res.data?['data'] as List? ?? []; return list.cast>(); } Future?> createReview( String slug, { required String authorName, required int rating, String? comment, String? authorPhone, }) async { final res = await _client.dio.post>( '/api/public/cafes/$slug/reviews', data: { 'authorName': authorName, 'rating': rating, if (comment != null && comment.isNotEmpty) 'comment': comment, if (authorPhone != null && authorPhone.isNotEmpty) 'authorPhone': authorPhone, }, ); return res.data?['data'] as Map?; } Future?> getCafe(String slug) async { final res = await _client.dio.get>('/api/public/cafes/$slug'); return res.data?['data'] as Map?; } Future?> getMenu(String slug) async { final res = await _client.dio.get>('/api/public/cafes/$slug/menu'); return res.data?['data'] as Map?; } Future?> resolveQr(String qrCode) async { final res = await _client.dio.get>('/api/q/$qrCode'); return res.data?['data'] as Map?; } Future?> placeOrder( String slug, { required String? tableId, required List> items, String? guestPhone, String? guestName, }) async { final res = await _client.dio.post>( '/api/public/cafes/$slug/orders', data: { 'orderType': 'DineIn', if (tableId != null) 'tableId': tableId, if (guestPhone != null) 'guestPhone': guestPhone, if (guestName != null) 'guestName': guestName, 'items': items, }, ); return res.data?['data'] as Map?; } Future?> trackOrder(String orderId) async { final res = await _client.dio.get>('/api/public/orders/$orderId/track'); return res.data?['data'] as Map?; } Future?> createReservation( String slug, { required String guestName, required String guestPhone, required String date, required String time, required int partySize, String? notes, }) async { final res = await _client.dio.post>( '/api/public/cafes/$slug/reservations', data: { 'guestName': guestName, 'guestPhone': guestPhone, 'date': date, 'time': time, 'partySize': partySize, if (notes != null) 'notes': notes, }, ); return res.data?['data'] as Map?; } }