import APIClient
import ComposableArchitecture
import FeatureOnboardingModels
import FeatureOnboardingScreens
import SwiftUI
import Utilities

struct InternalViews: View {
    let actions: DebugMenuView.Actions

    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Debug")) {
                    NavigationLink(destination: InternalStatsigExposureTestView(), label: { Text("Statsig Exposure Test") })
                }

                Section(header: Text("View Examples")) {
                    NavigationLink(
                        destination: NavigationLazyView {
                            BirthdayEntryScreen(store: Store(initialState: BirthdayEntry.State(isWorking: false, me: Me(models: [], roles: [:], flags: [:], user: User.mock()), initialValue: "", showBackButton: true, showClearButton: true), reducer: { BirthdayEntry() }))
                        },
                        label: { Text("Birthday Entry") }
                    )

                    Button(action: actions.showOnboarding, label: {
                        Text("Go to Onboarding")
                    })

                    Button(action: actions.showMadlibsOnboarding, label: {
                        Text("Go to Madlibs Onboarding")
                    })

                    Button(action: actions.showHooksCreate, label: {
                        Text("Go to Hooks Create")
                    })

                    Button(action: actions.showNotificationQuestion) {
                        Text("Go to notification prompt on black screen")
                    }
                    
                    Divider()
                    
                    Button("Orpheus Custom Create") {
                        actions.showOrpheusCustomCreate()
                    }
                    
                    Button("Orpheus Custom Remix") {
                        actions.showOrpheusCustomCreateCover()
                    }
                }
            }
            .padding(.vertical)
            .navigationTitle(Text("Internal Views"))
        }
    }
}

extension DebugMenuView.Actions {
    static let empty = Self(
        showOnboarding: {},
        showMadlibsOnboarding: {},
        showHooksCreate: {},
        showNotificationQuestion: {},
        showOrpheusCustomCreate: {},
        showOrpheusCustomCreateCover: {}
    )
}

#Preview {
    InternalViews(actions: .empty)
}
