You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

224 lines
6.9 KiB

//
// RewardViewModel.swift
// GMERemittance
//
// Created by Sujal on 3/14/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
class RewardViewModel: ModelExtension {
var rewardsAvailable: Box<Int?> = Box(nil)
private var rewards: [Reward] = [Reward] ()
private var rewardNames: [String] = [String] ()
private var rewardImageNames: [String] = [String] ()
private var rewardRedeemPoints: [Int] = [Int] ()
private var selectedRewardIndex: Int!
private var address: String!
var rewardConnectionTimeOut: Box<Bool?> = Box(nil)
private let user_id = UserDefaults.standard.object(forKey: "com.gmeremit.username") as! String
}
extension RewardViewModel {
/**
- returns: reward list
*/
func getRewards() -> [Reward] {
return rewards
}
/**
- returns: rewards count
*/
func getRewardCount() -> Int {
return rewards.count
}
/**
To get reward id
- parameter index: position of reward id in an array
- returns: reward id
*/
func getRewardId(index: Int) -> String {
return rewards[index].rewardId
}
/**
To get reward name
- parameter index: position of reward name in an array
- returns: name
*/
func getRewardName(index: Int) -> String {
return rewards[index].rewardName
}
/**
To get reward image url
- parameter index: position of reward image url in an array
- returns: url
*/
func getRewardImage(index: Int) -> String? {
if let rewardUrl = rewards[index].rewardUrl {
return rewardUrl
}
return nil
}
/**
To get redeem point
- parameter index: position of redeem point in an array
- returns: point
*/
func getRedeemPoint(index: Int) -> String {
return rewards[index].redeemPoints
}
/**
To get selected reward
- parameter index: position of selected reward
- returns: index
*/
func getSelectedRewardIndex() -> Int {
return selectedRewardIndex
}
/**
To set selected reward
- parameter index: position of selected reward
*/
func setSelectedRewardIndex(index: Int) {
selectedRewardIndex = index
}
}
extension RewardViewModel {
/**
Validate the empty textfield
*/
func validateAddress(address: String) -> isValid {
self.address = address.removeSpacesTrailingPreceding()
if address.isBlank {
return .InValid("Please fill the address")
}
return .Valid
}
func submitRequest() {
}
}
extension RewardViewModel {
/**
Api request for reward
*/
func fetchRewards() {
if !Reachability.isConnectedToNetwork() {
self.internetConnection.value = false
} else {
RestApiMananger.sharedInstance.fetchRewards(completion: { (result) in
switch result {
case let .success(rewardsJson):
guard rewardsJson.count > 0 else {
self.setErrorMessage(message: "No rewards obtained")
self.rewardsAvailable.value = 0
return
}
self.rewards.removeAll()
for i in 0 ... (rewardsJson.count-1) {
do {
let reward = try JSONDecoder().decode(Reward.self, from: rewardsJson[i].rawData())
self.rewards.append(reward)
} catch let err {
self.setErrorMessage(message: "Error Decoding: " + String(describing: err))
self.rewardsAvailable.value = 0
}
}
self.rewardsAvailable.value = 1
case .failure(_):
self.setErrorMessage(message: "Error Fetching Rewards")
self.rewardsAvailable.value = 0
case .updateAccessCode():
RestApiMananger.sharedInstance.updateAccessCode(userId: self.user_id, password: self.getLoginPassword()) {
result in
if result != "Error"{
let uuid = RestApiMananger.sharedInstance.getUUID()
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
self.fetchRewards()
}
}
case .logOutUser():
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
self.anotherLogin.value = true
case .timeOut:
self.rewardConnectionTimeOut.value = false
}
})
}
}
/**
Api request for redeem requst
- parameter rewardId: add to reward id
*/
func redeemReward(rewardId: String) {
if !Reachability.isConnectedToNetwork() {
self.internetConnection.value = false
} else {
let param: [String: String] = ["userId": user_id, "userAddress": address]
RestApiMananger.sharedInstance.redeemReward(rewardId: rewardId, param: param, completion: { (result) in
switch result {
case let .success(redeemedJson):
UserDefaults.standard.set(redeemedJson["remainingRedeemPoints"].stringValue, forKey: "com.gmeremit.rewardPoint")
self.rewardsAvailable.value = 2
case .failure(_):
self.setErrorMessage(message: "Error Redeeming Rewards")
self.rewardsAvailable.value = 0
case .updateAccessCode():
RestApiMananger.sharedInstance.updateAccessCode(userId: self.user_id, password: self.getLoginPassword()) {
result in
if result != "Error"{
let uuid = RestApiMananger.sharedInstance.getUUID()
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
self.redeemReward(rewardId: rewardId)
}
}
case .logOutUser():
self.anotherLogin.value = true
case .timeOut:
self.rewardConnectionTimeOut.value = false
}
})
}
}
}