TelcoViewController.swift 11.5 KB
//
//  TelcoViewController.swift
//  WarplySDKFrameworkIOS
//
//  Created by Manos Chorianopoulos on 16/7/22.
//

import UIKit

@objc public class TelcoViewController: UIViewController, UIPopoverControllerDelegate {
    @IBOutlet weak var mainView: UIView!
    @IBOutlet weak var backgroundImage: UIImageView!
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var scrollContentView: UIView!
    @IBOutlet weak var heroImage: UIImageView!
    @IBOutlet weak var heroImageHeight: NSLayoutConstraint!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var descriptionLabel: UILabel!
    @IBOutlet weak var activateButton: UIButton!
    @IBOutlet weak var valueView: UIView!
    @IBOutlet weak var valueLabel: UILabel!
    @IBOutlet weak var giftTypeLabel: UILabel!
    @IBOutlet weak var giftDurationView: UIView!
    @IBOutlet weak var giftDurationLabel: UILabel!
    @IBOutlet weak var borderLineView: UIView!
    @IBOutlet weak var moreButton: UIButton!
    @IBOutlet weak var moreTextView: UITextView!
    @IBOutlet weak var moreTextViewHeight: NSLayoutConstraint!
    
    let uiscreen: CGRect = UIScreen.main.bounds
    
    public var ccms: swiftApi.LoyaltyContextualOfferModel?
    public var campaign: swiftApi.CampaignItemModel?
    var selectedNumber: String = ""
    public var numbersList: Array<String> = []

    var moreVisible: Bool = false;
    
    public override func viewDidLoad() {
        
        super.viewDidLoad()
        
        self.hidesBottomBarWhenPushed = true
        
        // Do any additional setup after loading the view.
        getProfileRequest()
        
        setBackButton("ic_close")
        setNavigationTitle(ccms?._titleOffer ?? "")

        backgroundImage.image = UIImage(named: "coupons_scrollview_white", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil)
        
        scrollView.clipsToBounds = true
        scrollView.layer.cornerRadius = 30
        scrollView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius
        
        heroImage.load(link: ccms?._imageOfferUrl ?? "", placeholder: UIImage(), cache: URLCache())
        heroImage.contentMode = .scaleAspectFill
        heroImageHeight.constant = self.uiscreen.height * 0.25
        nameLabel.text = ccms?._description ?? ""
        // descriptionLabel.text = ccms?._subtitle ?? ""

        valueView.gradientBorder(width: 1, colors: [UIColor(rgb: 0x07A2D1), UIColor(rgb: 0x73CA34)], startPoint: .unitCoordinate(.bottomLeft), endPoint: .unitCoordinate(.topRight), andRoundCornersWithRadius: 35)
        valueLabel.text = ccms?._giftValue ?? ""
        giftTypeLabel.text = ccms?._giftType ?? ""
        
        giftDurationLabel.text = ccms?._duration ?? ""
        giftDurationView.frame = CGRect(x: 0.0, y: 0.0, width: giftDurationLabel.intrinsicContentSize.width + 20, height: giftDurationView.frame.height)
        giftDurationView.gradientBorder(width: 2, colors: [UIColor(rgb: 0x65DD6B), UIColor(rgb: 0x0D81B8)], startPoint: .unitCoordinate(.left), endPoint: .unitCoordinate(.right), andRoundCornersWithRadius: 35)
        
        borderLineView.applyGradient(colours: [UIColor(rgb: 0x0AA3CD), UIColor(rgb: 0x6ECA43)], gradient: GradientOrientation.horizontal, cornerRadius: 0.0)
        
        activateButton.titleLabel?.font = UIFont(name: "PFSquareSansPro-Medium", size: 16)
        activateButton.setTitle("Ενεργοποίηση", for: .normal)
        activateButton.setTitleColor(.white, for: .normal)
        activateButton.backgroundColor = UIColor(red: 0.47, green: 0.75, blue: 0.08, alpha: 1.00)
        activateButton.layer.cornerRadius = 12.0

        moreButton.titleLabel?.font = UIFont(name: "PFSquareSansPro-Regular", size: 16)
//        termsButton.imageView?.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5)
        moreButton.setTitle("Δες Περισσότερα", for: .normal)
        moreButton.setTitleColor(UIColor(red: 0.25, green: 0.33, blue: 0.39, alpha: 1.00), for: .normal)
        moreButton.setImage(UIImage(named: "ic_down_dark.png"), for: .normal)
        // TODO: UNCOMMENT
//        moreButton.setImage(UIImage(named: "ic_down_dark.png", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal)
        moreButton.semanticContentAttribute = .forceRightToLeft
        moreButton.tintColor = UIColor(red: 0.21, green: 0.32, blue: 0.41, alpha: 1.00)
        moreButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 0);
        moreButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 5);
        
//        let htmlText = ccms?._description ?? ""
//        moreTextView.attributedText = htmlText.htmlToAttributedString
        moreTextView.text = ccms?._termsAndConditions ?? ""
        moreTextView.font = UIFont(name: "PFSquareSansPro-Regular", size: 13)
        moreTextView.textColor = UIColor(rgb: 0x415564)
//        moreTextView.textAlignment = .center
        moreTextView.isScrollEnabled = false
        
        toggleMore()
    }
    
    // MARK: - Functions
    func toggleMore() {
        if (moreVisible) {
            moreTextView.isHidden = false
            let targetSize = CGSize(width: moreTextView.frame.width, height: CGFloat(MAXFLOAT))
            moreTextViewHeight.constant = moreTextView.sizeThatFits(targetSize).height
            
            moreButton.setImage(UIImage(named: "ic_up_dark.png", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal)
        } else {
            moreTextView.isHidden = true
            moreTextViewHeight.constant = CGFloat(0)
            
            moreButton.setImage(UIImage(named: "ic_down_dark.png", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil), for: .normal)
        }
    }

    func showConfirmDialog() -> Void {

        let alert = UIAlertController(title: "Ενεργοποίηση υπηρεσίας", message: "Θέλετε να γίνει ενεργοποίηση στο Κινητό μου;", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Ενεργοποίηση", style: .default, handler: { action in
            switch action.style{
                case .default:
                self.submitOrderRequest()

                case .cancel:
                print("cancel")

                case .destructive:
                print("destructive")

            }
        }))
        alert.addAction(UIAlertAction(title: "Άκυρο", style: .default, handler: { action in
            switch action.style{
                case .default:
                print("default")

                case .cancel:
                print("cancel")

                case .destructive:
                print("destructive")

            }
        }))
        self.present(alert, animated: true, completion: nil)
    }

    func showDialog(_ alertTitle: String, _ alertSubTitle: String) -> Void {

        let alert = UIAlertController(title: alertTitle, message: alertSubTitle, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
            switch action.style{
                case .default:
                print("default")

                case .cancel:
                print("cancel")

                case .destructive:
                print("destructive")

            }
        }))
        self.present(alert, animated: true, completion: nil)
    }
    
    
    // MARK: - API CALLS
    func getProfileRequest() {
        swiftApi().getProfileAsync(getProfileCallback)
    }

    func getProfileCallback (_ profileData: swiftApi.ProfileModel?) -> Void {
        if (profileData != nil) {
            DispatchQueue.main.async {
                self.numbersList = profileData?._msisdnList ?? []
            }
        } else {
        }
    }
    
    func submitOrderRequest() {
        swiftApi().submitOrderAsync(campaign_session_uuid: (campaign?.session_uuid ?? ""), user_msisdn: self.selectedNumber, businessService: (ccms?._businessService ?? ""), offerName: (ccms?._offerName ?? ""), productType: (ccms?._productType ?? ""), provDuration: (ccms?._provDuration ?? ""), noOfRecurrance: (ccms?._noOfRecurrance ?? ""), price: (ccms?._price ?? ""), discount: (ccms?._discount ?? ""), voiceCategory: (ccms?._voiceCategory ?? ""), dataCategory: (ccms?._dataCategory ?? ""), minsValue: (ccms?._minsValue ?? ""), dataValue: (ccms?._dataValue ?? ""), provStepValueMins: (ccms?._provStepValueMins ?? ""), 
        OfferAudienceLevel: (ccms?._offerAudienceLevel ?? ""), UACIOfferTrackingCode: (ccms?._uaciOfferTrackingCode ?? ""), OFFERCODE1: (ccms?._offerCode1 ?? ""), SCORE: (ccms?._score ?? ""), ZONE: (ccms?._zone ?? ""), WAVE: (ccms?._wave ?? ""), VALIDITY: (ccms?._validity ?? ""), TREATMENT_CODE: (ccms?._treatmentCode ?? ""), ccms_session_id: (ccms?._sessionId ?? ""), notificationMessage: (ccms?._notificationMessage ?? ""), 
        submitOrderCallback)
    }
    
    func submitOrderCallback (_ response: swiftApi.GenericResponseModel?) -> Void {
        if (response != nil) {
            DispatchQueue.main.async {
                if (response?.getStatus == 1) {
                    self.showDialog("Το αίτημά σου ολοκληρώθηκε επιτυχώς!","Θα ενημερωθείς άμεσα για την ενεργοποίηση του πακέτου σου.")
                    // self.postEventRequest()
                    
                } else {
                    self.showDialog("Αποτυχία","Κάτι πήγε στραβά")
                }
            }
        } else {
            self.showDialog("Αποτυχία","Κάτι πήγε στραβά")
        }
    }

    // func postEventRequest() {
    //     swiftApi().postEventAsync(Session_ID: (campaign?.session_uuid ?? ""), OfferAudienceLevel: (ccms?._offerAudienceLevel ?? ""), msisdn: self.selectedNumber, UACIOfferTrackingCode: (ccms?._uaciOfferTrackingCode ?? ""), OFFERCODE1: (ccms?._offerCode1 ?? ""), SCORE: (ccms?._score ?? ""), ZONE: (ccms?._zone ?? ""), WAVE: (ccms?._wave ?? ""), VALIDITY: (ccms?._validity ?? ""), TREATMENT_CODE: (ccms?._treatmentCode ?? ""), postEventCallback)
    // }
    
    // func postEventCallback (_ response: swiftApi.GenericResponseModel?) -> Void {
    //     if (response != nil) {
    //         DispatchQueue.main.async {
    //             if (response?.getStatus == 1) {
                    
    //             } else {
    //             }
    //         }
    //     } else {
    //     }
    // }

    // MARK: - Actions
    @IBAction func activateButtomAction(_ sender: Any) {
        self.numbersPopupTapped(sender)
    }

    @IBAction func moreButtonAction(_ sender: Any) {
        moreVisible = !moreVisible
        toggleMore()
    }
}

// MARK: NumbersPopup
extension TelcoViewController: NumbersPopupDelegate {
    @objc func numbersPopupTapped(_ sender: Any) {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
        let pp = storyboard.instantiateViewController(withIdentifier: "NumberPopupViewController") as! SwiftWarplyFramework.NumberPopupViewController
        pp.InitWithController(controller: self,
                              numbersList: self.numbersList,
                              sender: sender,
                              delegate: self,
                              headerText: "Επιλογή σύνδεσης")
    }
    
    func presentedPopup() {
//        Code for when popup is presented
    }
    
    func dismissedPopup() {
//        Code for when popup is dismissed
    }
    
    func optionSelected(_ option: String) {
//        Code for when option is selected
        self.selectedNumber = option
        DispatchQueue.main.async {
            self.showConfirmDialog()
        }
    }
}