SubscriptionViewController.swift 3.09 KB
//
//  SubscriptionViewController.swift
//  browser
//
//  Created by Artem Talko on 24.11.2023.
//

import UIKit
import StoreKit


final class SubscriptionViewController: UIViewController {
    private let mainView = SubscriptionView()
    
    private let tableViewData: [String]
    
    private let storeKit: StoreKitManager
    
    private let successCompletion: () -> Void
    
    init(storeKitManager: StoreKitManager, completion: @escaping () -> Void) {
        storeKit = storeKitManager
        successCompletion = completion
        self.tableViewData = StringConstants.removeAdvertTableViewData
        
        super.init(nibName: nil, bundle: nil)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        initViewController()
    }
    
    override func loadView() {
        view = mainView
    }
   
    private func initViewController() {
        addTargets()
        setupTableView()
    }
}

//MARK: - Table View
extension SubscriptionViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableViewData.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: SubscriptionTableViewCell.cellID) as?
                SubscriptionTableViewCell else {
            return UITableViewCell()
        }
        cell.advantagesCellLabel.text = tableViewData[indexPath.row]
        
        return cell
    }
}

//MARK: Helpers
extension SubscriptionViewController {
    private func addTargets() {
        mainView.closeButton.addTarget(self, action: #selector(closeViewController(_ :)), for: .touchUpInside)
        mainView.subscribeButton.addTarget(self, action: #selector(buyAdblocker), for: .touchUpInside)
    }
    
    private func setupTableView() {
        mainView.advantagesTableView.dataSource = self
        mainView.advantagesTableView.delegate = self
        mainView.advantagesTableView.register(SubscriptionTableViewCell.self, forCellReuseIdentifier: SubscriptionTableViewCell.cellID)
    }
    
    @MainActor
    private func buySubscription() async throws {
        if let adblockerProduct = storeKit.storeProducts.first(where: { $0.id == "com.browser.adblocker" }) {
            if let trusaction = try await storeKit.purchase(adblockerProduct) {
//                trusaction.expirationDate //TODO: save to user defaults
                dismiss(animated: true)
                successCompletion()
            }
        }
    }
}


//MARK: Action
extension SubscriptionViewController {
    @objc
    private func closeViewController(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
    
    @objc
    private func buyAdblocker(_ sender: UIButton) {
        Task {
            do {
                try await buySubscription()
            } catch {
                //TODO: show alert failed
            }
        }
    }
}