import AnalyticsClient
import ComposableArchitecture

extension PaywallLoaded {
    struct Analytics: AnalyticsReducer {
        var source: String = "paywall_loaded_screen"

        func analytics(before _: State, after: State, action: Action) -> Effect<Action> {
            switch action {
            case .viewDidAppear:
                track(Event(
                    category: .general,
                    actionName: .paywallScreenAppeared
                ))

            case .purchase(let subscription):
                let revenueAmount: Double? = switch subscription.period {
                case .year:
                    subscription.yearPrice ?? subscription.price
                case .month:
                    subscription.price
                default:
                    nil
                }
                track(Event(
                    category: .general,
                    actionName: .paywallTappedPurchaseSubscription,
                    context: subscription.id,
                    revenueAmount: revenueAmount,
                    revenueCurrency: after.appStoreCurrencyCode
                ))

            case .purchaseResult(.success((let subscription, _))):
                let revenueAmount: Double? = switch subscription.period {
                case .year:
                    subscription.yearPrice ?? subscription.price
                case .month:
                    subscription.price
                default:
                    nil
                }
                track(Event(
                    category: .general,
                    actionName: .paywallPurchaseSucceeded,
                    context: subscription.id,
                    revenueAmount: revenueAmount,
                    revenueCurrency: after.appStoreCurrencyCode
                ))

            default:
                break
            }

            return .none
        }
    }
}
