// public_service.dart import 'dart:convert'; import 'dart:developer'; import 'package:wanisclient/models/CityModel.dart'; import 'package:http/http.dart' as http; import '../config/api_response.dart'; import '../config/constants/app_constant.dart'; import '../models/OfferModel.dart'; import '../models/ride_options.dart'; import '../providers/utils_singleton.dart'; class PublicService { // singleton boilerplate PublicService._(); static final PublicService _instance = PublicService._(); factory PublicService() => _instance; // Future>> getAllOffer(String type) async { try { var uri = Uri.https(baseUrl, '/api/v1/public/all_offers_list', {'type': type}); final request = await http.get( uri, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, ); log("request.statusCode getAllOffer : ${request.statusCode}"); log("request.statusCode getAllOffer : ${request.body}"); if (request.statusCode == 200 || request.statusCode == 201) { List offers = offerModelFromJson(request.body); log("offers ! ! : $offers"); return APIResponse( statusCode: request.statusCode, errorMessage: null, data: offers, ); } else { return APIResponse( statusCode: request.statusCode, errorMessage: "Please try again later", ); } } catch (e) { log("Error fetching group messages: $e"); return APIResponse( statusCode: 500, errorMessage: "An error occurred. Please try again later.", ); } } Future getAllRideOption(String codecoupon, String startTime, String startlocation, String tripgeomhash) async { try { var uri = Uri.https(baseUrl, '/api/ride/getallrideoption'); //startlocaiton , //starttime //copon final body = jsonEncode({ "codecoupon": codecoupon, "startTime": startTime, // or use a fixed string if needed "startlocation": startlocation, "tripgeomhash": tripgeomhash }); log("*** ===> getAllRideOption $body"); final request = await http.post( uri, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': 'Bearer ${utils.token}', }, body: body, ); log('options : ${request.body}'); log('options : ${request.statusCode}'); if (request.statusCode == 200 || request.statusCode == 201) { final List data = json.decode(request.body) as List; List result = data .map((e) => RideOption.fromJson(e as Map)) .toList(); return APIResponse( statusCode: request.statusCode, errorMessage: null, data: result, ); } else { return APIResponse( statusCode: request.statusCode, errorMessage: "Please try again later", ); } } catch (e) { log("Error fetching group messages: $e"); return APIResponse( statusCode: 500, errorMessage: "An error occurred. Please try again later.", ); } } Future getAllTunisianCity() async { try { var uri = Uri.https(baseUrl, '/api/v1/public/all_tunisienne_city'); final request = await http.get( uri, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, ); log('options : ${request.body}'); log('options : ${request.statusCode}'); if (request.statusCode == 200 || request.statusCode == 201) { final List data = json.decode(request.body) as List; List result = data .map((e) => CityModel.fromJson(e as Map)) .toList(); return APIResponse( statusCode: request.statusCode, errorMessage: null, data: result, ); } else { return APIResponse( statusCode: request.statusCode, errorMessage: "Please try again later", ); } } catch (e) { log("Error fetching tunisia city: $e"); return APIResponse( statusCode: 500, errorMessage: "An error occurred. Please try again later.", ); } } }