import SwiftUI
import ImagePlayground

struct ContentView: View {
   @Environment(\.supportsImagePlayground) private var support

   @State private var images: [UIImage] = [UIImage(named: "nopicture")!]
   @State private var creating: Bool = false
   @State private var instructions: String = ""

   var body: some View {
      VStack {
         ScrollView(.horizontal) {
            LazyHStack(spacing: 0) {
               ForEach(images.indices, id: \.self) { index in
                  Image(uiImage: images[index])
                     .resizable()
                     .frame(width: 300, height: 300)
                     .containerRelativeFrame(.horizontal)
               }
            }
         }
         .scrollTargetBehavior(.paging)
         .frame(height: 320)

         TextField("Describe the image", text: $instructions)
            .textFieldStyle(.roundedBorder)
            .padding()
         Button("Create Image") {
            creating = true
            Task {
               let tempImages = await createImages()
               
               if !tempImages.isEmpty {
                  self.images = tempImages
               }
               creating = false
               instructions = ""
            }
         }
         .disabled(creating || instructions.isEmpty || !support)
         .padding()
         .buttonStyle(.borderedProminent)
         Spacer()
      }
   }
   func createImages() async -> [UIImage] {
      var tempImages: [UIImage] = []
      do {
         let creator = try await ImageCreator()
         let images = creator.images(for: [.text(instructions)], style: .illustration, limit: 4)
         for try await image in images {
            tempImages.append(UIImage(cgImage: image.cgImage))
         }
      } catch {
         print("Error: \(error)")
      }
      return tempImages
   }
}