import SwiftUI

struct ContentView: View {
    @Environment(AppState.self) private var app
    @Environment(\.scenePhase) private var scenePhase

    /// Bootstrap fertig — Signal an den Splash, Phase 2 zu starten.
    @State private var isReadyToDismiss = false
    /// Splash hat seine Fade-Phase ausgespielt und kann aus dem View-Tree raus.
    @State private var splashFinished = false

    var body: some View {
        ZStack {
            mainContent
            if !splashFinished {
                SplashScreenView(isReady: isReadyToDismiss) {
                    splashFinished = true
                }
                .zIndex(10)
            }
        }
        .task { await boot() }
        .onChange(of: scenePhase) { _, newPhase in
            if newPhase == .active { app.onScenePhaseActive() }
        }
    }

    @ViewBuilder
    private var mainContent: some View {
        Group {
            if app.auth.isLoggedIn {
                MainView()
            } else {
                LoginView()
            }
        }
        .environment(\.locale, Locale(identifier: app.language))
        #if os(iOS)
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        #else
        .frame(minWidth: 900, minHeight: 600)
        #endif
    }

    private func boot() async {
        await app.bootstrap()
        // SplashScreenView wartet selbst auf seine Mindest-Loop-Zeit, daher
        // kein künstlicher Sleep mehr hier nötig. Sobald isReadyToDismiss
        // gesetzt wird, fängt der Splash mit Phase 2 an und ruft am Ende
        // seinen onComplete-Callback (splashFinished = true).
        isReadyToDismiss = true
    }
}
