import SwiftUI
import AppIntents

struct ShowMovie: AppIntent {
   static let title: LocalizedStringResource = "Show Movie"
   static let description = IntentDescription("Shows your favorite movie.")

   static let supportedModes: IntentModes = .background

   @Parameter(default: "Undefined")
   var movie: String

   @MainActor
   func perform() async throws -> some IntentResult & ProvidesDialog {
      let appData = ApplicationData.shared
      let favorites = appData.listMovies.filter({ $0.favorite })
      if favorites.count > 1 {
         let titles = favorites.map(\.title)
         movie = try await $movie.requestDisambiguation(among: titles, dialog: IntentDialog("Which movie?"))
      } else if let favorite = favorites.first {
         movie = favorite.title
      }
      return .result(
         dialog: IntentDialog("Your favorite movie is \(movie)")
      )
   }
}
struct TestIntentsShortcuts: AppShortcutsProvider {
   static var appShortcuts: [AppShortcut] {
      AppShortcut(
         intent: ShowMovie(),
         phrases: [
            "Show me my favorite movie in \(.applicationName)",
            "Find my favorite movie in \(.applicationName)"
         ],
         shortTitle: LocalizedStringResource("Get Movie"),
         systemImageName: "star.circle"
      )
   }
}