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/dependency_injection.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/advertisment_models/vehicle_details_models.dart'; import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/models/general_models/enums_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/user_models/cities.dart'; import 'package:mc_common_app/models/user_models/country.dart'; import 'package:mc_common_app/models/user_models/role.dart'; import 'package:mc_common_app/utils/utils.dart'; abstract class CommonRepo { Future getAllCountries(); Future> getVehicleTypes(); Future> getVehicleBrands({required int vehicleTypeId}); Future> getVehicleModels({required int vehicleTypeId}); Future> getVehicleModelYears({required int vehicleTypeId}); Future> getVehicleColors({required int vehicleTypeId}); Future> getVehicleConditions({required int vehicleTypeId}); Future> getVehicleCategories({required int vehicleTypeId}); Future> getVehicleMileages({required int vehicleTypeId}); Future> getVehicleTransmission({required int vehicleTypeId}); Future> getVehicleSellerTypes({required int vehicleTypeId}); Future> getVehicleCountries(); Future> getVehicleCities({required int countryId}); Future> getVehicleDamageParts(); Future getAllCites(String countryId); Future getRoles(); Future getCarCheckServiceScheduleDetails({required double lat, required double long}); Future> getPhotographyServiceScheduleListByOffices({required double lat, required double long, required int cityID}); //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}); Future createComplainFromProvider({required int customerId, required String comment, required int complainType}); } 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 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, required int cityID}) async { var params = { "Latitude": lat.toString(), "Longitude": long.toString(), "cityID": cityID.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> getEnumTypeValues({int? enumTypeID, String? enumTypeName}) async { if (enumTypeID == -1) { // This is for the vehicle type condition (old, new) which will be added to API later final Map json = { "data": [ {"id": 1, "enumTypeID": 0, "enumValueStr": "New", "enumValue": 1, "isActive": true}, {"id": 2, "enumTypeID": 0, "enumValueStr": "Used", "enumValue": 2, "isActive": true}, ], }; List enums = List.generate((json['data'] as List).length, (index) => EnumsModel.fromJson(json['data'][index])); return enums; } if (enumTypeID == -2) { // This is for the ShippingRequestStatus which will be added to API later final Map json = { "data": [ {"id": 1, "enumTypeID": 0, "enumValueStr": "Initiated", "enumValue": 1, "isActive": true}, {"id": 2, "enumTypeID": 0, "enumValueStr": "In Transit", "enumValue": 2, "isActive": true}, {"id": 3, "enumTypeID": 0, "enumValueStr": "Out for Delivery", "enumValue": 3, "isActive": true}, {"id": 4, "enumTypeID": 0, "enumValueStr": "Delivered", "enumValue": 4, "isActive": true}, ], }; List enums = List.generate((json['data'] as List).length, (index) => EnumsModel.fromJson(json['data'][index])); return enums; } 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 enums = List.generate(enumGenericModel.data.length, (index) => EnumsModel.fromJson(enumGenericModel.data[index])); return enums; } @override Future> getVehicleCategories({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCategoryGet, queryParameters: postParams); List vehicleCategories = List.generate(adsGenericModel.data.length, (index) => VehicleCategoryModel.fromJson(adsGenericModel.data[index])); return vehicleCategories; } @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: countryId != -1 ? postParams : null); List vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index])); return vehicleCities; } @override Future> getVehicleColors({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleColorGet, queryParameters: postParams); List vehicleColors = List.generate(adsGenericModel.data.length, (index) => VehicleColorModel.fromJson(adsGenericModel.data[index])); return vehicleColors; } @override Future> getVehicleConditions({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleConditionGet, queryParameters: postParams); List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleConditionModel.fromJson(adsGenericModel.data[index])); return vehicleConditions; } @override Future> getVehicleCountries() async { GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCountryGet, ); List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleCountryModel.fromJson(adsGenericModel.data[index])); return vehicleConditions; } @override Future> getVehicleMileages({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleMileageGet, queryParameters: postParams); List vehicleMileages = List.generate(adsGenericModel.data.length, (index) => VehicleMileageModel.fromJson(adsGenericModel.data[index])); return vehicleMileages; } @override Future> getVehicleModelYears({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleModelYearGet, queryParameters: vehicleTypeId != -1 ? postParams : null, ); List vehicleModelYears = List.generate(adsGenericModel.data.length, (index) => VehicleYearModel.fromJson(adsGenericModel.data[index])); return vehicleModelYears; } @override Future> getVehicleModels({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleModelGet, queryParameters: postParams, ); List vehicleModels = List.generate(adsGenericModel.data.length, (index) => VehicleModel.fromJson(adsGenericModel.data[index])); return vehicleModels; } @override Future> getVehicleBrands({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleBrandGet, queryParameters: vehicleTypeId != -1 ? postParams : null, ); List vehicleBrands = List.generate(adsGenericModel.data.length, (index) => VehicleBrandsModel.fromJson(adsGenericModel.data[index])); return vehicleBrands; } @override Future> getVehicleSellerTypes({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleSellerTypeGet, queryParameters: postParams, ); List vehicleSellerTypes = List.generate(adsGenericModel.data.length, (index) => VehicleSellerTypeModel.fromJson(adsGenericModel.data[index])); return vehicleSellerTypes; } @override Future> getVehicleTransmission({required int vehicleTypeId}) async { var postParams = { "VehicleType": vehicleTypeId.toString(), }; GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTransmissionGet, queryParameters: postParams, ); List vehicleTransmissions = List.generate(adsGenericModel.data.length, (index) => VehicleTransmissionModel.fromJson(adsGenericModel.data[index])); return vehicleTransmissions; } @override Future getVehicleDetails({int? vehicleTypeId, int? vehicleBrandId}) async { var postParams = { "vehicleType": vehicleTypeId == null ? 0 : vehicleTypeId.toString(), "isVehicleBrand": "true", "vehicleBrand": vehicleBrandId == null ? 0 : vehicleBrandId.toString(), "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> getVehicleDamageParts() async { GenericRespModel adsGenericModel = await apiClient.getJsonForObject( token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleDamagePartGet, ); List vehicleParts = List.generate(adsGenericModel.data.length, (index) => VehiclePartModel.fromJson(adsGenericModel.data[index])); return vehicleParts; } @override Future createComplainFromProvider({required int customerId, required String comment, required int complainType}) async { final providerId = appState.getUser.data!.userInfo!.providerId; final parameters = { "serviceProviderID": providerId, "customerID": customerId, "detail": comment, "complaintType": complainType, }; GenericRespModel adsGenericModel = await apiClient.postJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.providerComplaintCreate, parameters, token: appState.getUser.data!.accessToken, ); return adsGenericModel; } }