import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/utils/enums.dart'; class ServiceModel { final int? serviceProviderServiceId; final dynamic providerServiceDescription; final int? categoryId; final String? categoryName; final int? serviceId; final String? serviceDescription; final String? serviceDescriptionN; final int? serviceStatus; final ServiceStatusEnum? serviceStatusEnum; final dynamic statusText; final bool? isAllowAppointment; final bool? isAllowAppointmentHome; final int? customerLocationRange; String? rangePricePerKm; final int? itemsCount; List? serviceItems; bool isExpandedOrSelected; int providerServiceId; String providerServiceName; bool isHomeSelected; double currentTotalServicePrice; CurrentLocationInfoModel servicelocationInfo; bool isActive; ServiceModel({ this.serviceProviderServiceId, this.providerServiceDescription, this.categoryId, this.categoryName, this.serviceId, this.serviceDescription, this.serviceDescriptionN, this.serviceStatus, this.serviceStatusEnum, this.statusText, this.isAllowAppointment, this.isAllowAppointmentHome, this.customerLocationRange, this.rangePricePerKm, this.itemsCount, this.serviceItems, this.isHomeSelected = false, this.currentTotalServicePrice = 0.0, this.isActive = true, required this.isExpandedOrSelected, required this.providerServiceId, required this.providerServiceName, required this.servicelocationInfo, }); factory ServiceModel.fromJson(Map json, {bool isForAppointment = false}) => ServiceModel( serviceProviderServiceId: json["serviceProviderServiceID"], providerServiceDescription: json["providerServiceDescription"], categoryId: json["categoryID"], categoryName: json["categoryName"], serviceId: json["serviceID"], serviceDescription: json["serviceDescription"] ?? json["serviceName"], serviceDescriptionN: json["serviceDescriptionN"] ?? json["serviceNameN"], serviceStatus: json["serviceStatus"], serviceStatusEnum: ((json["serviceStatus"] ?? 0) as int).toServiceStatusEnum(), statusText: json["statusText"], isAllowAppointment: json["isAllowAppointment"], isAllowAppointmentHome: json["isAllowAppointmentHome"], customerLocationRange: json["customerLocationRange"], rangePricePerKm: json["rangePricePerKm"]?.toString(), itemsCount: json["itemsCount"], serviceItems: isForAppointment ? json["serviceItemList"] == null ? [] : List.from(json["serviceItemList"]!.map((x) => ItemData.fromJson(x))) : json["branchServiceItems"] == null ? [] : List.from(json["branchServiceItems"]!.map((x) => ItemData.fromJson(x))), isExpandedOrSelected: false, providerServiceId: 0, providerServiceName: json['serviceName'] ?? "", isHomeSelected: false, isActive: json["isActive"] ?? true, servicelocationInfo: CurrentLocationInfoModel(address: '', distanceToBranch: 0.0, homeChargesInCurrentService: 0.0, latitude: 0.0, longitude: 0.0), ); Map toJson() => { "serviceProviderServiceID": serviceProviderServiceId, "providerServiceDescription": providerServiceDescription, "categoryID": categoryId, "categoryName": categoryName, "serviceID": serviceId, "serviceDescription": serviceDescription, "serviceDescriptionN": serviceDescriptionN, "serviceStatus": serviceStatus, "statusText": statusText, "isAllowAppointment": isAllowAppointment, "isAllowAppointmentHome": isAllowAppointmentHome, "customerLocationRange": customerLocationRange, "rangePricePerKm": rangePricePerKm, "itemsCount": itemsCount, "branchServiceItems": serviceItems == null ? [] : List.from(serviceItems!.map((x) => x.toJson())), }; @override String toString() { return 'ServiceModel{serviceProviderServiceId: $serviceProviderServiceId, providerServiceDescription: $providerServiceDescription, categoryId: $categoryId, categoryName: $categoryName, serviceId: $serviceId, serviceDescription: $serviceDescription, serviceDescriptionN: $serviceDescriptionN, serviceStatus: $serviceStatus, statusText: $statusText, isAllowAppointment: $isAllowAppointment, isAllowAppointmentHome: $isAllowAppointmentHome, customerLocationRange: $customerLocationRange, rangePricePerKm: $rangePricePerKm, itemsCount: $itemsCount, serviceItems: $serviceItems, isExpandedOrSelected: $isExpandedOrSelected}'; } } class CurrentLocationInfoModel { String address; double latitude; double longitude; double distanceToBranch; double homeChargesInCurrentService; CurrentLocationInfoModel({ required this.address, required this.latitude, required this.longitude, required this.distanceToBranch, required this.homeChargesInCurrentService, }); @override String toString() { return 'CurrentLocationInfoModel{address: $address, latitude: $latitude, longitude: $longitude, distanceToBranch: $distanceToBranch, homeChargesInCurrentService: $homeChargesInCurrentService}'; } }