import SwiftUI

public struct LoadingView: View {
    private let message: String?

    public init(message: String? = nil) {
        self.message = message
    }

    public var body: some View {
        VStack(alignment: .center, spacing: 16) {
            GradientSpinner(size: .extraLarge)
            if let message = message, !message.isEmpty {
                Text(message)
                    .multilineTextAlignment(.center)
                    .foregroundStyle(Color.SemanticV1.textSecondary)
                    .typographyV1(.body1)
            }
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
        .background(Color.SemanticV1.backgroundPrimary)
    }
}

struct LoadingView_Previews: PreviewProvider {
    static var previews: some View {
        LoadingViewSample(message: "Optional message")
    }
}

struct LoadingViewSample: View {
    let message: String

    init(message: String) {
        self.message = message
    }

    var body: some View {
        VStack {
            LoadingView()
            LoadingView(message: message)
        }
        .padding()
    }
}
