import ComposableArchitecture
import Foundation

@Reducer
public struct BrandedAlertHookStatus {
    @ObservableState
    public struct State: Equatable {
        var style: HookStatusAlertStyle

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

    public enum Action {
        case delegate(Delegate)
        case close
        case openURL(URL)

        public enum Delegate {
            case tappedButton
        }
    }

    @Dependency(\.openURL) var openURL

    public var body: some ReducerOf<Self> {
        Reduce { _, action in
            switch action {
            case .close:
                return .send(.delegate(.tappedButton))

            case .openURL(let url):
                return .run { _ in
                    await openURL(url)
                }

            case .delegate:
                return .none
            }
        }
    }
}
