import 'dart:async'; 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/general_models/m_response.dart'; import 'package:mc_common_app/models/provider_branches_models/provider_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/branch.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/document.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/services.dart'; abstract class BranchRepo { Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude); Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}); Future fetchAllBranches(); Future fetchBranchCategory(); Future fetchServicesByCategoryId(String serviceCategoryId); Future createNewService(List> map); Future getServiceProviderDocument(dynamic userId); Future serviceProviderDocumentsUpdate(List? documents); Future getBranchAndServices(); Future createService(List> map); Future updateService(List> map); Future getMatchedServices(int oldBranchId, int newBranchId, int categoryId); Future duplicateItems(Map map); Future getAllProviderDealers(Map map); Future getBranchUsers(Map map); Future assignDealerToBranch(Map map); Future removeDealerFromBranch(Map map); } class BranchRepoImp implements BranchRepo { @override Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async { var postParams = { "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", "branchName": branchName, "branchDescription": branchDescription, "cityID": cityId, "address": address, "latitude": latitude, "longitude": longitude, "isActive": true }; String t = AppState().getUser.data!.accessToken ?? ""; debugPrint("token " + t); return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createProviderBranch, postParams, token: t); } @override Future fetchAllBranches() async { var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; String t = AppState().getUser.data!.accessToken ?? ""; debugPrint("token " + t); return await injector.get().getJsonForObject((json) => Branch.fromJson(json), ApiConsts.ServiceProviderBranchGet, queryParameters: postParams, token: t); } @override Future fetchBranchCategory() async { var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; String t = AppState().getUser.data!.accessToken ?? ""; debugPrint("token " + t); return await injector.get().getJsonForObject((json) => Category.fromJson(json), ApiConsts.ServiceCategory_Get, queryParameters: postParams, token: t); } @override Future fetchServicesByCategoryId(String serviceCategoryId) async { var postParams = {"ServiceCategoryID": serviceCategoryId}; String t = AppState().getUser.data!.accessToken ?? ""; debugPrint("token " + t); return await injector.get().getJsonForObject((json) => Services.fromJson(json), ApiConsts.Services_Get, queryParameters: postParams, token: t); } @override Future createNewService(List> map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Create, map, token: t); } @override Future getServiceProviderDocument(dynamic userId) async { var queryParameters = { "ServiceProviderID": userId.toString(), }; String? token = AppState().getUser.data?.accessToken; debugPrint(token); return await injector .get() .getJsonForObject((json) => Document.fromJson(json), ApiConsts.GetProviderDocument, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? ""); } @override Future serviceProviderDocumentsUpdate(List? documents) async { List> map = []; for (int i = 0; i < documents!.length; i++) { if (documents[i].document != null) { var postParams = { "id": documents[i].id, "serviceProviderID": documents[i].serviceProviderId, "documentID": documents[i].documentId, "documentExt": documents[i].fileExt, "documentImage": documents[i].document, "isActive": true }; map.add(postParams); } } String t = AppState().getUser.data!.accessToken ?? ""; debugPrint("token " + t); return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderDocument_Update, map, token: t); } @override Future getBranchAndServices() async { var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; String t = AppState().getUser.data!.accessToken ?? ""; print("tokeen121 " + t); return await injector.get().getJsonForObject((json) => ProviderModel.fromJson(json), ApiConsts.BranchesAndServices, queryParameters: postParams, token: t); } @override Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}) async { String lat = "0", long = "0"; try { lat = latitude.substring(0, 9); long = longitude.substring(0, 9); } catch (e) {} var postParams = { "id": id, "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", "branchName": branchName, "branchDescription": branchDescription, "cityID": cityId, "address": address, "latitude": lat, "longitude": long, "isActive": isNeedToDelete }; String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateProviderBranch, postParams, token: t); } @override Future createService(List> map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Create, map, token: t); } @override Future updateService(List> map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Update, map, token: t); } @override Future getMatchedServices(int oldBranchId, int newBranchId, int categoryId) async { var postParams = { "ProviderBranchIDExisted": oldBranchId.toString(), "ProviderBranchIDNew": newBranchId.toString(), "CategoryID": categoryId.toString(), }; String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().getJsonForObject((json) => MResponse.fromJson(json), ApiConsts.getMatchedServices, queryParameters: postParams, token: t); } @override Future duplicateItems(Map map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.duplicateItems, map, token: t); } @override Future getAllProviderDealers(Map map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().getJsonForObject((json) => MResponse.fromJson(json), ApiConsts.getAllProviderDealers, queryParameters: map, token: t); } @override Future getBranchUsers(Map map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().getJsonForObject((json) => MResponse.fromJson(json), ApiConsts.getBranchUser, queryParameters: map, token: t); } @override Future assignDealerToBranch(Map map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.assignDealerToBranch, map, token: t); } @override Future removeDealerFromBranch(Map map) async { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.removeDealerFromBranch, map, token: t); } }