MFYViewController.swift 11.6 KB
//
//  MFYViewController.swift
//  WarplySDKFrameworkIOS
//
//  Created by Βασιλης Σκουρας on 5/5/22.
//

import Foundation
import UIKit
import SwiftEventBus

@objc public class MFYViewController: UIViewController {
    @IBOutlet weak var mainView: UIView!
    @IBOutlet weak var tableView: UITableView!
    
    public var campaigns:Array<swiftApi.CampaignItemModel> = []
    public var loyaltyList:Array<swiftApi.CampaignItemModel> = swiftApi().mergeMFYCCMSLoyaltyCampaigns(campaigns: swiftApi().getCCMSLoyaltyCampaigns())
    public var ccmsList:Array<swiftApi.LoyaltyContextualOfferModel> = swiftApi().getCCMSLoyaltyCampaigns()
    
    
    public override func viewDidLoad() {
        super.viewDidLoad()
        
        self.hidesBottomBarWhenPushed = true

        setBackButton()
        setNavigationTitle("MORE for YOU", "bold")
        
        tableView.delegate = self
        tableView.dataSource = self

        SwiftEventBus.onMainThread(self, name: "ccms_retrieved") { result in
            print("===== SwiftEventBus ccms_retrieved =====")
            self.refreshData()
        }

        SwiftEventBus.onMainThread(self, name: "campaigns_retrieved") { result in
            print("===== SwiftEventBus campaigns_retrieved =====")
            self.refreshData()
        }
        
        tableView.clipsToBounds = true
        tableView.layer.cornerRadius = 30
        tableView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius
        tableView.contentInset.top = 50
        
        // Add Top left corner radius
        mainView.clipsToBounds = true
        mainView.layer.cornerRadius = 30
        mainView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius
        mainView.backgroundColor = UIColor(red: 0.22, green: 0.32, blue: 0.40, alpha: 1.00)
        
    }

    public override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        self.refreshData()
    }

    // MARK: - Functions
    func refreshData() -> Void {
        self.loyaltyList = swiftApi().mergeMFYCCMSLoyaltyCampaigns(campaigns: swiftApi().getCCMSLoyaltyCampaigns())
        self.ccmsList = swiftApi().getCCMSLoyaltyCampaigns()
        var tempCampaigns:Array<swiftApi.CampaignItemModel> = loyaltyList

        if (self.ccmsList.count > 0) {
            for ccmsItem in self.ccmsList {
                if (((ccmsItem._loyaltyCampaignId == "") || (ccmsItem._loyaltyCampaignId == "NA")) && (ccmsItem._zone == "COSMOTE_APP_MORE4U")) {
                     let newCampaign = swiftApi.CampaignItemModel()
                     newCampaign._title = ccmsItem._title
                     newCampaign._logo_url = ccmsItem._imageUrl
                    newCampaign._subtitle = ccmsItem._subtitle
                    newCampaign._message = ccmsItem._message
                     newCampaign._ccms = ccmsItem
                     tempCampaigns.append(newCampaign)
                }
            }
        }

        self.campaigns = tempCampaigns
        self.tableView.reloadData()
    }
    
}

// MARK: - TableView
extension MFYViewController: UITableViewDelegate, UITableViewDataSource{
    
    public func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.campaigns.count
    }
    
    public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 220.0 + 10.0
//        return UITableViewAutomaticDimension
    }
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MFYInboxTableViewCellId", for: indexPath) as! MFYInboxTableViewCell
        
        if (campaigns[indexPath.row]._type != nil && campaigns[indexPath.row]._type == "telco") {
            let ccmsCampaigns = swiftApi().getCCMSLoyaltyCampaigns()
            let loyaltyCampaignIdExists = ccmsCampaigns.contains { $0._loyaltyCampaignId == campaigns[indexPath.row].session_uuid }

            if (loyaltyCampaignIdExists == true) {
                for item in ccmsCampaigns {
                    if (item._loyaltyCampaignId == campaigns[indexPath.row].session_uuid) {
                        cell.configureCell(ccms: item)
                        break;
                    }
                }
            }
            
        } else {
            cell.configureCell(campaign: campaigns[indexPath.row])
        }
        
        return cell
    }
    
    public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if (campaigns[indexPath.row]._ccms != nil) {
            let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
            let vc = storyboard.instantiateViewController(withIdentifier: "ContextualViewController") as! SwiftWarplyFramework.ContextualViewController
            vc.ccms = campaigns[indexPath.row]._ccms
            self.navigationController?.pushViewController(vc, animated: true)

            if let sessionUuid = campaigns[indexPath.row].session_uuid {
                getSingleCampaignAsyncRequest(sessionUuid: sessionUuid)
            }
            
        } else if (campaigns[indexPath.row]._type != nil && campaigns[indexPath.row]._type == "telco") {
            let ccmsCampaigns = swiftApi().getCCMSLoyaltyCampaigns()
            let loyaltyCampaignIdExists = ccmsCampaigns.contains { $0._loyaltyCampaignId == campaigns[indexPath.row].session_uuid }

            if (loyaltyCampaignIdExists == true) {
                for item in ccmsCampaigns {
                    if (item._loyaltyCampaignId == campaigns[indexPath.row].session_uuid) {
                        let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
                        let vc = storyboard.instantiateViewController(withIdentifier: "TelcoViewController") as! SwiftWarplyFramework.TelcoViewController
                        vc.ccms = item
                        vc.campaign = campaigns[indexPath.row]
                        self.navigationController?.pushViewController(vc, animated: true)

                        if let sessionUuid = campaigns[indexPath.row].session_uuid {
                            getSingleCampaignAsyncRequest(sessionUuid: sessionUuid)
                        }
                    }
                }
            }
            
        } else if (campaigns[indexPath.row]._campaign_type == "coupon") {
            let couponsetUuid = campaigns[indexPath.row]._couponset
            
            if (couponsetUuid != "") {
                let couponsetsList = swiftApi().getCouponSetList()
                
                for item in couponsetsList {
                    if (item.uuid == couponsetUuid) {
                       let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
                       let vc = storyboard.instantiateViewController(withIdentifier: "CouponViewController") as! SwiftWarplyFramework.CouponViewController
                       vc.couponset = item
                       vc.campaign = campaigns[indexPath.row]

                        let ccmsCampaigns = swiftApi().getCCMSLoyaltyCampaigns()
                        let loyaltyCampaignIdExists = ccmsCampaigns.contains { $0._loyaltyCampaignId == campaigns[indexPath.row].session_uuid }

                        if (loyaltyCampaignIdExists == true) {
                            for item in ccmsCampaigns {
                                if (item._loyaltyCampaignId == campaigns[indexPath.row].session_uuid) {
                                    vc.ccms = item
                                    break;
                                }
                            }
                        }
                        
                       self.navigationController?.pushViewController(vc, animated: true)

                        if let sessionUuid = campaigns[indexPath.row].session_uuid {
                            getSingleCampaignAsyncRequest(sessionUuid: sessionUuid)
                        }

                        break;
                    }
                }
            }
                
        } else {
            // let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
            // let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as! SwiftWarplyFramework.CampaignViewController
            // let url = swiftApi().constructCampaignUrl(campaigns[indexPath.row])
            //     print("CampaignUrl url onclick: " + url)
            // vc.campaignUrl = url
            // self.navigationController?.pushViewController(vc, animated: true)

            let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
            let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as! SwiftWarplyFramework.CampaignViewController
            var url = ""
            var params = ""
            let isCcmsOffer = (campaigns[indexPath.row].ccms_offer != nil) && (campaigns[indexPath.row].ccms_offer != "") && (campaigns[indexPath.row].ccms_offer == "true")
            
            if (isCcmsOffer) {
                let ccmsCampaigns = swiftApi().getCCMSLoyaltyCampaigns()

                let loyaltyCampaignIdExists = ccmsCampaigns.contains { $0._loyaltyCampaignId == campaigns[indexPath.row].session_uuid }

                if (loyaltyCampaignIdExists == true) {
                    var ccmsCampaignFound:swiftApi.LoyaltyContextualOfferModel = swiftApi.LoyaltyContextualOfferModel()
                    for item in ccmsCampaigns {
                        if (item._loyaltyCampaignId == campaigns[indexPath.row].session_uuid) {
                            ccmsCampaignFound = item
                        }
                    }
                    url = swiftApi().constructCcmsUrl(campaigns[indexPath.row], ccmsCampaignFound)
                    params = swiftApi().constructCcmsParams(campaigns[indexPath.row], ccmsCampaignFound)

                } else {
                    url = swiftApi().constructCampaignUrl(campaigns[indexPath.row])
                    params = swiftApi().constructCampaignParams(campaigns[indexPath.row])

                }

                let encoder = JSONEncoder()
                encoder.outputFormatting = .prettyPrinted
                let data = try! encoder.encode(campaigns[indexPath.row])

                print("CCMS_CLICK " + String(data: data, encoding: .utf8)!)

            } else {
                url = swiftApi().constructCampaignUrl(campaigns[indexPath.row])
                params = swiftApi().constructCampaignParams(campaigns[indexPath.row])

                let encoder = JSONEncoder()
                encoder.outputFormatting = .prettyPrinted
                let data = try! encoder.encode(campaigns[indexPath.row])

                print("GFY_CLICK " + String(data: data, encoding: .utf8)!)
            }
            print("CampaignUrl url onclick: " + url)
            vc.campaignUrl = url
            vc.params = params
            self.navigationController?.pushViewController(vc, animated: true)

            if let sessionUuid = campaigns[indexPath.row].session_uuid {
                getSingleCampaignAsyncRequest(sessionUuid: sessionUuid)
            }
        }
    }


    func getSingleCampaignAsyncRequest(sessionUuid: String) {
        swiftApi().getSingleCampaignAsync(sessionUuid: sessionUuid, getSingleCampaignCallback)
    }

    func getSingleCampaignCallback (_ getSingleCampaignData: swiftApi.VerifyTicketResponseModel?) -> Void {
        if (getSingleCampaignData != nil) {
            DispatchQueue.main.async {
            }
        } else {
        }
    }
    
}