import SwiftUI

struct ContentView: View {
    @State private var currentURL: URL? // URL de la página actual
    @State private var nextURL: URL? // URL de la página siguiente
    @State private var showNextPage = false // Controla si el stack superior está visible

    private let notificationHandler = NotificationHandler()

    var body: some View {
        ZStack {
            // Página actual (visible detrás cuando el stack superior está activo)
            if let currentURL = currentURL {
                WebView(url: currentURL, blockNavigation: true)
                    .frame(maxWidth: .infinity, maxHeight: .infinity) // Ocupa toda la pantalla
                    .edgesIgnoringSafeArea(.all)
                    .zIndex(showNextPage ? 0 : 1) // Cambiar el orden dinámicamente
            }

            // Página siguiente (visible durante la animación)
            if let nextURL = nextURL {
                WebView(url: nextURL, blockNavigation: false)
                    .frame(maxWidth: .infinity, maxHeight: .infinity) // Ocupa toda la pantalla
                    .edgesIgnoringSafeArea(.all)
                    .transition(.move(edge: .leading)) // Animación SlideFromLeft
                    .zIndex(showNextPage ? 1 : 0) // Cambiar el orden dinámicamente
            }
        }
        .edgesIgnoringSafeArea(.all) // Ignorar márgenes seguros, permitiendo que el contenido pase detrás del status bar
        .animation(.easeInOut(duration: 0.5), value: showNextPage)
        .onAppear {
            // Configurar el manejador de notificaciones
            notificationHandler.onNavigateToURL = { url in
                self.navigateTo(url: url)
            }

            // Cargar la página inicial
            if let initialURL = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "www") {
                currentURL = initialURL
            }
        }
    }

    func navigateTo(url: URL) {
        nextURL = url
        showNextPage = true // Mostrar el stack superior

        // Actualizar la página actual después de la animación
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.55) {
            self.currentURL = self.nextURL // Actualizar la página actual
        }

        // Cambiar el orden del stack y ocultar el stack superior sin animación
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
            self.showNextPage = false // Mover el stack superior al fondo
            self.nextURL = nil // Limpiar el stack superior
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
