import StatsigClient
import SwiftUI

struct InternalStatsigExposureTestView: View {
    class Store: ObservableObject {
        @Published private(set) var started = false
        @Published var treatment = FeatureFlag.onboarding.internalSettingsExperiment

        func start() {
            ParameterStores.Onboarding.markExposed(flag: \.$internalSettingsExperiment)
            started = true
        }
    }

    @StateObject private var store = Store()

    var body: some View {
        VStack(spacing: 40) {
            if !store.started {
                Text("You haven't been exposed to the layer yet.")

                Button {
                    withAnimation {
                        store.start()
                    }
                } label: { Text("Start experiment") }
            } else {
                Text("You've been marked as exposed to the Statsig layer")
            }

            experiment
                .modifier(if: !store.started) {
                    $0.hidden()
                }
        }
        .navigationTitle(Text("Statsig Exposure"))
    }

    var experiment: some View {
        VStack {
            HStack {
                Spacer()

                Rectangle()
                    .foregroundStyle(.blue)
                    .frame(width: 100, height: 100)
                    .overlay(
                        Text("Control")
                            .font(.headline)
                    )
                    .opacity(store.treatment ? 0.2 : 1)

                Spacer()

                Rectangle()
                    .foregroundStyle(.red)
                    .frame(width: 100, height: 100)
                    .overlay(
                        Text("Treatment")
                            .font(.headline)
                    )
                    .opacity(store.treatment ? 1 : 0.2)

                Spacer()
            }

            Text("Assigned to the \(store.treatment ? "Treatment" : "Control") group.")
        }
    }
}

#Preview {
    InternalStatsigExposureTestView()
}
