struct ContentView: View {
   @State private var appData = ApplicationData.shared
   @State private var searchURL = ""

   var body: some View {
      VStack {
         TextField("Insert Domain", text: $searchURL)
            .textFieldStyle(.roundedBorder)
            .autocapitalization(.none)
            .autocorrectionDisabled(true)
            .onSubmit {
               appData.loadPage(domain: searchURL)
            }
            .padding()
            .glassEffect(.regular)
            .disabled(appData.page.isLoading)
         WebView(appData.page)
      }
      .onChange(of: appData.page.url) {
         if let newURL = appData.page.url?.absoluteString {
            searchURL = newURL
         }
      }
      .toolbar {
         ToolbarItem(placement: .bottomBar) {
            Button(action: {
               appData.page.reload()
            }, label: { Image(systemName: "arrow.clockwise") })
            .disabled(appData.page.url == nil)
         }
         ToolbarSpacer(.flexible, placement: .bottomBar)
         ToolbarItemGroup(placement: .bottomBar) {
            Button(action: {
               if let previous = appData.page.backForwardList.backList.last {
                  appData.page.load(previous)
               }
            }, label: { Image(systemName: "arrow.left")})
            .disabled(appData.page.backForwardList.backList.isEmpty)
            Button(action: {
               if let next = appData.page.backForwardList.forwardList.first {
                  appData.page.load(next)
               }
            }, label: { Image(systemName: "arrow.right")})
            .disabled(appData.page.backForwardList.forwardList.isEmpty)
         }
      }
   }
}