import ComponentLibrary
import ComposableArchitecture
import Localization
import SwiftUI

@Reducer
public struct V5Announcement {
    public init() {}

    @ObservableState
    public struct State: Equatable {
        public enum Style {
            case free
            case pro
        }

        var style: Style
        var ctaButtonText: String {
            switch style {
            case .free:
                return L10n.FeatureAnnouncements.upgradeForAccess

            case .pro:
                return L10n.FeatureAnnouncements.createWithV5
            }
        }

        public init(style: Style) {
            self.style = style
        }
    }

    public enum Action {
        case dismiss
        case ctaButtonTapped
        case delegate(Delegate)

        public enum Delegate {
            case openCreate
            case openSubscriptions
        }
    }

    @Dependency(\.dismiss) var dismiss

    public var body: some ReducerOf<Self> {
        Reduce { state, action in
            switch action {
            case .dismiss:
                return .run { _ in await self.dismiss() }

            case .ctaButtonTapped:
                switch state.style {
                case .free:
                    return .send(.delegate(.openSubscriptions))

                case .pro:
                    return .send(.delegate(.openCreate))
                }

            case .delegate:
                return .none
            }
        }
    }
}
