import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/dependencies.dart'; import 'package:mc_common_app/models/advertisment_models/ss_car_check_schedule_model.dart'; import 'package:mc_common_app/models/advertisment_models/ss_photo_schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/models/general/generic_resp_model.dart'; import 'package:mc_common_app/models/user/cities.dart'; import 'package:mc_common_app/models/user/country.dart'; import 'package:mc_common_app/models/user/role.dart'; import '../models/advertisment_models/vehicle_details_models.dart'; import '../models/general/enums_model.dart'; abstract class CommonRepo { Future getAllCountries(); Future getAllCites(String countryId); //TODO: Needs to remove cities method one of them Future> getVehicleCities({required int countryId}); Future getRoles(); Future> getMyAppointments(); Future getCarCheckServiceScheduleDetails({required double lat, required double long}); Future> getPhotographyServiceScheduleListByOffices({required double lat, required double long}); // Future> getProviderServiceCategories(); // Future> getProviderServices({required int categoryId}); Future> getVehicleTypes(); //TODO: Needs to remove common methods from AD's repo and delete all repeated methods. Future getVehicleDetails({int? vehicleTypeId, int? vehicleBrandId}); Future> getEnumTypeValues({int? enumTypeID, String? enumTypeName}); } class CommonRepoImp implements CommonRepo { ApiClient apiClient = injector.get(); AppState appState = injector.get(); @override Future getAllCountries() async { return await apiClient.getJsonForObject((json) => Country.fromJson(json), ApiConsts.GetAllCountry); } @override Future getAllCites(String countryId) async { var postParams = { "CountryID": countryId, }; return await apiClient.getJsonForObject((json) => Cities.fromJson(json), ApiConsts.GetAllCities, queryParameters: postParams); } @override Future getRoles() async { return await apiClient.getJsonForObject((json) => Role.fromJson(json), ApiConsts.GetProviderRoles); } @override Future> getMyAppointments() async { var params = { "customerID": appState.getUser.data!.userInfo!.customerId.toString() ?? "", }; GenericRespModel genericRespModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), queryParameters: params, ApiConsts.serviceProvidersAppointmentGet, ); List appointmentList = List.generate(genericRespModel.data.length, (index) => AppointmentListModel.fromJson(genericRespModel.data[index])); return appointmentList; } @override Future getCarCheckServiceScheduleDetails({required double lat, required double long}) async { var params = { "Latitude": lat.toString(), "Longitude": long.toString(), }; GenericRespModel genericRespModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), queryParameters: params, ApiConsts.adsCarCheckupSPBranchScheduleSlotGet, ); SSCarCheckScheduleModel ssCarCheckScheduleModel = SSCarCheckScheduleModel.fromJson(genericRespModel.data[0]); return ssCarCheckScheduleModel; } @override Future> getPhotographyServiceScheduleListByOffices({required double lat, required double long}) async { var params = { "Latitude": lat.toString(), "Longitude": long.toString(), }; GenericRespModel genericRespModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), queryParameters: params, ApiConsts.adsPhotoOfficeAppointmentScheduleSlotGet, ); if (genericRespModel.data == null) { return []; } List ssPhotoScheduleModel = List.generate(genericRespModel.data.length, (index) => SSPhotoOfficeScheduleModel.fromJson(genericRespModel.data[index])); return ssPhotoScheduleModel ?? []; } @override Future> getVehicleTypes() async { GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTypeGet); List vehicleTypes = List.generate(adsGenericModel.data.length, (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index])); return vehicleTypes; } @override Future getVehicleDetails({int? vehicleTypeId, int? vehicleBrandId}) async { var postParams = { "vehicleType": vehicleTypeId ?? 0, "isVehicleBrand": "true", "vehicleBrand": vehicleBrandId ?? 0, "isVehicleCategory": "true", "isVehicleColor": "true", "isVehicleCondition": "true", "isVehicleMileage": "true", "isVehicleModel": "true", "isVehicleModelYear": "true", "isVehiclePriceRange": "true", "isVehiclePricingMethod": "true", "isVehcileSellerType": "true", "isVehicleTransmission": "true", "isCountry": "true" }; String token = appState.getUser.data!.accessToken ?? ""; GenericRespModel adsGenericModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleDetailsMaster, postParams, token: token, ); VehicleDetailsModel vehicleDetails = VehicleDetailsModel.fromJson(adsGenericModel.data); return vehicleDetails; } @override Future> getVehicleCities({required int countryId}) async { var postParams = { "CountryID": countryId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCityGet, queryParameters: postParams); List vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index])); return vehicleCities; } @override Future> getEnumTypeValues({int? enumTypeID, String? enumTypeName}) async { var postParams = {"enumTypeID": (enumTypeID ?? 0).toString(), "enumTypeName": enumTypeName ?? ""}; GenericRespModel enumGenericModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getEnumTypeValues, postParams, token: appState.getUser.data!.accessToken, ); List vehicleCities = List.generate(enumGenericModel.data.length, (index) => EnumsModel.fromJson(enumGenericModel.data[index])); return vehicleCities; } // // @override // Future> getProviderServiceCategories() async { // GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.serviceCategoryGet); // List providerCategories = List.generate(adsGenericModel.data.length, (index) => ProviderCategoryModel.fromJson(adsGenericModel.data[index])); // return providerCategories; // } // @override // Future> getProviderServices({required int categoryId}) async { // var postParams = { // "ServiceCategoryID": categoryId.toString(), // }; // GenericRespModel adsGenericModel = // await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.serviceCategoryGet, queryParameters: postParams); // List providerServices = List.generate(adsGenericModel.data.length, (index) => ProviderServiceModel.fromJson(adsGenericModel.data[index])); // return providerServices; // } }