import SwiftUI

@main
struct NotizViewerApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
    @StateObject private var store = SecureStore.shared

    var body: some Scene {
        WindowGroup {
            RootView()
                .environmentObject(store)
        }
    }
}

struct RootView: View {
    @EnvironmentObject private var store: SecureStore
    @State private var challengeId: String?
    @State private var challengeMessage: String?
    @State private var ready = false

    var body: some View {
        Group {
            if !ready {
                SplashView()
            } else if store.isLoggedIn {
                HomeView()
            } else if let challengeId {
                TwoFactorView(challengeId: challengeId, message: challengeMessage)
            } else {
                LoginView(onTwoFactor: { id, message in
                    self.challengeId = id
                    self.challengeMessage = message
                })
            }
        }
        .task {
            try? await Task.sleep(nanoseconds: 800_000_000)
            ready = true
        }
    }
}

struct SplashView: View {
    var body: some View {
        ZStack {
            ViewerTheme.pageBackground.ignoresSafeArea()
            VStack(spacing: 12) {
                Image(systemName: "bell.badge.fill")
                    .font(.system(size: 56))
                    .foregroundStyle(ViewerTheme.accent)
                Text("Notiz Viewer")
                    .font(.system(size: 26, weight: .bold, design: .rounded))
                    .foregroundStyle(ViewerTheme.ink)
                Text("Notifications. Delivered. Connected.")
                    .font(.footnote)
                    .foregroundStyle(ViewerTheme.muted)
            }
        }
    }
}
