import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_categories_list.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/wala_plus_category_model.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/wala_plus_retailer_model.dart'; class OffersAndDiscountsApiClient { static final OffersAndDiscountsApiClient _instance = OffersAndDiscountsApiClient._internal(); OffersAndDiscountsApiClient._internal(); factory OffersAndDiscountsApiClient() => _instance; Future> getSaleCategories() async { List getSaleCategoriesList = []; String url = "${ApiConsts.cocRest}Mohemm_ITG_GetCategories"; Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": 100, "ItgPageNo": 1, "ItgIsActive": true}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject( (response) { var body = json.decode(response['Mohemm_ITG_ResponseItem']); GetCategoriesList getSaleCategoriesListObj = GetCategoriesList(); getSaleCategoriesListObj.id = 0; getSaleCategoriesListObj.categoryNameEn = "All"; getSaleCategoriesListObj.categoryNameAr = "الجميع"; getSaleCategoriesListObj.isActive = true; getSaleCategoriesListObj.content = ' '; getSaleCategoriesList.add(getSaleCategoriesListObj); body['result']['data'].forEach((v) { getSaleCategoriesList.add(GetCategoriesList.fromJson(v)); }); return getSaleCategoriesList; }, url, postParams, ); } Future> getOffersList(int categoryID, int pageSize) async { List getSaleCategoriesList = []; String url = "${ApiConsts.cocRest}GetOfferDiscountsConfigData"; Map postParams = {"EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER, "ItgPageSize": pageSize, "ItgPageNo": 1, "ItgCategoryID": categoryID}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject( (response) { var body = json.decode(response['Mohemm_ITG_ResponseItem']); var bodyData = body['result']['data']; if (bodyData != null) { bodyData.forEach((v) { getSaleCategoriesList.add(OffersListModel.fromJson(v)); }); } return getSaleCategoriesList; }, url, postParams, ); } Future> getWalaPlusCategories({BuildContext? context}) async { String url = ApiConsts.walaPlusCategories; String? pUserName = AppState().getUserName; if (pUserName == null || pUserName.isEmpty) { pUserName = "2537367522"; } String? tokenID = AppState().postParamsObject?.tokenID; if (tokenID == null || tokenID.isEmpty || tokenID == "adm!n") { tokenID = "@dm!n"; } String? logInTokenID = AppState().postParamsObject?.logInTokenID; if (logInTokenID == null || logInTokenID.isEmpty) { logInTokenID = "@dm!n"; } Map postParams = { "VersionID": 20, "Channel": 31, "LanguageID": context != null ? AppState().getLanguageID(context) : 2, "LogInTokenID": logInTokenID, "TokenID": tokenID, "P_USER_NAME": pUserName, }; return await ApiClient().postJsonForObject( (response) { List categories = []; if (response != null && response['WalaPlus_Categories'] != null) { var cats = response['WalaPlus_Categories']; if (cats is String) { cats = json.decode(cats); } if (cats is List) { cats.forEach((v) { categories.add(WalaPlusCategoryModel.fromJson(v)); }); } } return categories; }, url, postParams, ); } Future getWalaPlusRetailers({ String? categoryId, int page = 1, int perPage = 10, String? geoLocation, BuildContext? context, }) async { String url = ApiConsts.walaPlusRetailers; String? pUserName = AppState().getUserName; if (pUserName == null || pUserName.isEmpty) { pUserName = "2537367522"; } String? tokenID = AppState().postParamsObject?.tokenID; if (tokenID == null || tokenID.isEmpty) { tokenID = "adm!n"; } String? logInTokenID = AppState().postParamsObject?.logInTokenID; if (logInTokenID == null || logInTokenID.isEmpty) { logInTokenID = "@dm!n"; } Map postParams = { "VersionID": 20, "Channel": 31, "LanguageID": context != null ? AppState().getLanguageID(context) : 2, "LogInTokenID": logInTokenID, "TokenID": tokenID, "P_USER_NAME": pUserName, "WP_CategoryID": (categoryId == "all" || categoryId == null) ? "" : categoryId, "WP_Page": page, "WP_Per_page": perPage, }; if (geoLocation != null && geoLocation.isNotEmpty) { postParams["WP_Geo_Location"] = geoLocation; } return await ApiClient().postJsonForObject( (response) { if (response != null && response['WalaPlus_Retailers'] != null) { var val = response['WalaPlus_Retailers']; if (val is String) { val = json.decode(val); } if (val is Map) { return WalaPlusRetailersResponse.fromJson(val); } else if (val is Map) { return WalaPlusRetailersResponse.fromJson(Map.from(val)); } } return null; }, url, postParams, ); } Future getWalaPlusRetailerById({ required String retailerId, BuildContext? context, }) async { String url = ApiConsts.walaPlusRetailersByID; String? pUserName = AppState().getUserName; if (pUserName == null || pUserName.isEmpty) { pUserName = "2537367522"; } String? tokenID = AppState().postParamsObject?.tokenID; if (tokenID == null || tokenID.isEmpty) { tokenID = "adm!n"; } String? logInTokenID = AppState().postParamsObject?.logInTokenID; if (logInTokenID == null || logInTokenID.isEmpty) { logInTokenID = "@dm!n"; } Map postParams = { "VersionID": 20, "Channel": 31, "LanguageID": context != null ? AppState().getLanguageID(context) : 2, "LogInTokenID": logInTokenID, "TokenID": tokenID, "RetailerID": retailerId, "P_USER_NAME": pUserName, }; return await ApiClient().postJsonForObject( (response) { if (response != null && response['WalaPlus_RetailersByID'] != null) { var val = response['WalaPlus_RetailersByID']; if (val is String) { val = json.decode(val); } if (val is List && val.isNotEmpty) { var item = val.first; if (item is Map) { return WalaPlusRetailerModel.fromJson(item); } else if (item is Map) { return WalaPlusRetailerModel.fromJson(Map.from(item)); } } } return null; }, url, postParams, ); } }