import SwiftUI

struct NotificationWrapper {
   let value: Notification
}
struct FileInfo: Identifiable {
   let id: UUID = UUID()
   var name: String
   var url: URL
}
@Observable class ApplicationData {
   var listOfFiles: [FileInfo] = []
   var metaData: NSMetadataQuery!

   static let shared: ApplicationData = ApplicationData()
   private init() {
      metaData = NSMetadataQuery()
      metaData.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]

      Task {
         let center = NotificationCenter.default
         let name = NSNotification.Name.NSMetadataQueryDidFinishGathering
         for await notification in center.notifications(named: name, object: nil) {
            if notification.name == name {
               getFiles()
            }
         }
      }
      Task {
         let center = NotificationCenter.default
         let name = NSNotification.Name.NSMetadataQueryDidUpdate
         for await notification in center.notifications(named: name, object: nil) {
            if notification.name == name {
               let wrapper = NotificationWrapper(value: notification)
               updateFiles(notification: wrapper)
            }
         }
      }
      metaData.start()
   }
}