// // MyListVM.swift // WOKA // // Created by MacBook Pro on 13/06/24. // import Foundation import Alamofire enum CollectionSelectionMyList{ case webSeriesCV case webSeriesHindiCV case audioBooksCV case karaokeCV case gamesCV } class MyListVM{ weak var vc : MyListVC! var favListingData : FavouriteListingDM.ResultData? var webSeriesHindi = [FavouriteListingDM.ResultData.ShowDatum]() let refreshControl = UIRefreshControl() let feedbackGenerator = UIImpactFeedbackGenerator(style: .light) var selectedCollection : CollectionSelectionMyList? func initView(){ NotificationCenter.default.addObserver(self, selector: #selector(languageChanged), name: .languageDidChange, object: nil) if AuthFunc.shareInstance.getUserType() == 3{ // handle guest vc.guestLoginView.isHidden = false vc.guestLoginStack.isHidden = false vc.scrollView.isHidden = true return } setupCell() Utilities.startProgressHUD() getFavouriteListing() } func addGradient(){ let color1 = #colorLiteral(red: 0.6745098039, green: 0.6235294118, blue: 0.1725490196, alpha: 1) let color2 = #colorLiteral(red: 0.5450980392, green: 0.6745098039, blue: 0.1725490196, alpha: 1) vc.gradientView.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0)) } @objc func languageChanged(){ self.reloadCollections() } func setupCell(){ vc.webSeriesCV.register(UINib(nibName: K.CellIdentifier.Home.favouriteCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.Home.favouriteCell) vc.webSeriesCV.delegate = vc.self vc.webSeriesCV.dataSource = vc.self vc.webSeriesHindiCV.register(UINib(nibName: K.CellIdentifier.Home.favouriteCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.Home.favouriteCell) vc.webSeriesHindiCV.delegate = vc.self vc.webSeriesHindiCV.dataSource = vc.self vc.audioBooksCV.register(UINib(nibName: K.CellIdentifier.Home.favouriteCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.Home.favouriteCell) vc.audioBooksCV.delegate = vc.self vc.audioBooksCV.dataSource = vc.self vc.karaokeCV.register(UINib(nibName: K.CellIdentifier.Home.favouriteCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.Home.favouriteCell) vc.karaokeCV.delegate = vc.self vc.karaokeCV.dataSource = vc.self vc.gamesCV.register(UINib(nibName: K.CellIdentifier.Home.favouriteCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.Home.favouriteCell) vc.gamesCV.delegate = vc.self vc.gamesCV.dataSource = vc.self } // MARK: - Get Favourite Listing func getFavouriteListing(){ let headers : HTTPHeaders = ["Accept-Language" : AuthFunc.shareInstance.languageSelected == .english ? "English" : "Hindi", "access-token": AuthFunc.shareInstance.getAccessToken()] NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Home.favourite_listing, method: .post, headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in switch result{ case .success(let data): guard let self else{return} switch data.success{ case 0: self.refreshControl.endRefreshing() Utilities.dismissProgressHUD() self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) webSeriesHindi.removeAll() favListingData = nil reloadCollections() checkNil() case 1: self.refreshControl.endRefreshing() Utilities.dismissProgressHUD() guard let data = data.data?.result else{return} favListingData = nil webSeriesHindi.removeAll() favListingData = data if var hindiData = favListingData?.showData{ /* Taking out the hindi series , 1-> English , 18-> Hindi And the saving it to hindi series, also modify the bookmark category ids */ webSeriesHindi = hindiData.compactMap { $0 }.filter { ($0.bookmarkCategoryIDS?.components(separatedBy: ",").first == "18" || $0.bookmarkCategoryIDS?.components(separatedBy: ",").last == "18") }.map { element -> FavouriteListingDM.ResultData.ShowDatum in var modifiedElement = element modifiedElement.bookmarkCategoryIDS = "18" return modifiedElement } if let data = favListingData?.showData{ var indicesToRemove = [Int]() // Deleting the hindi series from main (those with category ID "18") for (index, element) in data.enumerated() { if let bookMarkCatID = element.bookmarkCategoryIDS?.components(separatedBy: ","){ if bookMarkCatID.count > 1{ // means multiple language /* if its greater than one , its for sure we have extracted the hindi episode */ hindiData[index].bookmarkCategoryIDS = "1" }else{ // means single language if bookMarkCatID.first == "18"{ indicesToRemove.append(index) } } } } // Remove items in reverse order to avoid index shifting issues for index in indicesToRemove.reversed() { hindiData.remove(at: index) } } // Updating the showData with the filtered list favListingData?.showData = hindiData } reloadCollections() feedbackGenerator.impactOccurred() checkNil() default: break } case .failure(let error): guard let self else{return} self.refreshControl.endRefreshing() Utilities.dismissProgressHUD() checkNil() self.vc.toast(msg: error.localizedDescription , time: 2) } } } // MARK: - Like , unlike func likePost(postID : Int, postType : Int, index : Int , onCompletion : @escaping (Bool) -> Void){ Utilities.startProgressHUD() let headers : HTTPHeaders = ["Accept-Language" : AuthFunc.shareInstance.languageSelected == .english ? "English" : "Hindi", "access-token": AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["post_id" : postID, "post_type" : postType] NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Home.post_like, method: .post, parameters: params, headers: headers) { [weak self](result : Result) in switch result{ case .success(let data): guard let self else{return} switch data.success{ case 0: Utilities.dismissProgressHUD() self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) onCompletion(false) case 1: Utilities.dismissProgressHUD() onCompletion(true) default: Utilities.dismissProgressHUD() onCompletion(false) } case .failure(let error): guard let self else{return} Utilities.dismissProgressHUD() self.vc.toast(msg: error.localizedDescription , time: 2) onCompletion(false) } } } func unlikePost(postID : Int, postType : Int , index : Int, onCompletion : @escaping (Bool) -> Void){ Utilities.startProgressHUD() let headers : HTTPHeaders = ["Accept-Language" : AuthFunc.shareInstance.languageSelected == .english ? "English" : "Hindi", "access-token": AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["post_id" : postID, "post_type" : postType] NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Home.post_unlike, method: .post, parameters: params, headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in switch result{ case .success(let data): guard let self else{return} switch data.success{ case 0: Utilities.dismissProgressHUD() self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) onCompletion(false) case 1: Utilities.dismissProgressHUD() onCompletion(true) default: Utilities.dismissProgressHUD() onCompletion(false) } case .failure(let error): guard let self else{return} Utilities.dismissProgressHUD() self.vc.toast(msg: error.localizedDescription , time: 2) onCompletion(false) } } } // MARK: - Remove Favourite func removeFavourite(postID : Int, postType : Int, categoryID : String, index : Int , onCompletion : @escaping (Bool) -> Void){ Utilities.startProgressHUD() let headers : HTTPHeaders = ["Accept-Language" : AuthFunc.shareInstance.languageSelected == .english ? "English" : "Hindi", "access-token": AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["id" : postID, "post_type" : postType, "category_id" : categoryID] NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Home.favourite_remove, method: .post, parameters: params, headers: headers) { [weak self](result : Result) in switch result{ case .success(let data): guard let self else{return} switch data.success{ case 0: Utilities.dismissProgressHUD() self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) onCompletion(false) case 1: Utilities.dismissProgressHUD() onCompletion(true) default: Utilities.dismissProgressHUD() onCompletion(false) } case .failure(let error): guard let self else{return} Utilities.dismissProgressHUD() self.vc.toast(msg: error.localizedDescription , time: 2) onCompletion(false) } } } func checkNil(){ guard let data = favListingData else{ self.vc.noDataStack.isHidden = false return } if data.showData?.count == 0 && data.singKaraokeData?.count == 0 && data.gameData?.count == 0 && data.audioData?.count == 0 && webSeriesHindi.count == 0{ self.vc.noDataStack.isHidden = false }else{ self.vc.noDataStack.isHidden = true } } func reloadCollections(){ vc.webSeriesCV.reloadData() vc.webSeriesHindiCV.reloadData() vc.audioBooksCV.reloadData() vc.karaokeCV.reloadData() vc.gamesCV.reloadData() } }