// // OneTimePaywallModel.swift // Lockdown // // Created by Radu Lazar on 05.08.2024. // Copyright © 2024 Confirmed Inc. All rights reserved. // import Foundation import SwiftyStoreKit class OneTimePaywallModel: ObservableObject { enum ActivePlan { case weekly case yearly } let products: OneTimeProducts var closeAction: (()->Void)? = nil var continueAction: ((String)->Void)? = nil @Published var trialEnabled = true @Published var activePlan: ActivePlan = .weekly @Published var yearlyPrice: String @Published var offerPrice: String @Published var weeklyPrice: String @Published var trialWeeklyPrice: String @Published var saving: Int @Published var showProgress = false init(products: OneTimeProducts, infos: [InternalSubscription]) { self.products = products let currencyFormatter = NumberFormatter() currencyFormatter.usesGroupingSeparator = true currencyFormatter.numberStyle = .currency currencyFormatter.locale = infos.first?.priceLocale let yp = infos.first(where: { $0.productId == products.yearly}).flatMap { $0.price } ?? 11.11 let wp = yp.dividing(by: 52) let twp = infos.first(where: { $0.productId == products.weeklyTrial}).flatMap { $0.price } ?? 0.11 let op = infos.first(where: { $0.productId == products.yearly}).flatMap { $0.offer } ?? 0.11 yearlyPrice = currencyFormatter.string(from: yp) ?? "__" weeklyPrice = currencyFormatter.string(from: wp) ?? "__" trialWeeklyPrice = currencyFormatter.string(from: twp) ?? "__" offerPrice = currencyFormatter.string(from: op) ?? "__" trialWeeklyPrice = infos.first(where: { $0.productId == products.weeklyTrial}).flatMap { currencyFormatter.locale = $0.priceLocale return currencyFormatter.string(from: $0.price) } ?? "__" saving = 100 - Int(Double(truncating: wp) / Double(truncating: twp)*100) } func purchase() { showProgress = true switch activePlan { case .weekly: continueAction?(trialEnabled ? products.weeklyTrial : products.weekly) case .yearly: continueAction?(trialEnabled ? products.yearlyTrial : products.yearly) } } }