import SwiftUI
import FoundationModels

struct ConversationView: View {
   @State private var appData = ApplicationData.shared
   @State private var position = ScrollPosition(idType: String.self)

   @Environment(\.modelContext) var dbContext
   let conversationID: UUID?

   var body: some View {
      VStack {
         ScrollView {
            Text(appData.response)
               .padding()
               .textSelection(.enabled)
               .id("textID")
         }
         .frame(minWidth: 350, maxWidth: .infinity, minHeight: 300, alignment: .leading)
         .background(Color.gray.opacity(0.2))
         .clipShape(RoundedRectangle(cornerRadius: 12))
         .scrollPosition($position)

         HStack {
            TextField("Insert Prompt", text: $appData.prompt)
               .font(Font.system(size: 16))
               .padding(10)
               .overlay(
                  RoundedRectangle(cornerRadius: 12)
                     .stroke(Color.secondary, lineWidth: 1)
               )
               .disabled(appData.session.isResponding)
            Button("Send") {
               Task {
                  if !appData.prompt.isEmpty {
                     var newPrompt = AttributedString("\(appData.prompt)\n\n")
                     newPrompt.font = .system(size: 16, weight: .bold)
                     appData.response.append(newPrompt)
                     
                     await appData.sendPrompt(dbContext: dbContext)
                  }
               }
            }
            .buttonStyle(.borderedProminent)
            .disabled(appData.session.isResponding)
         }
      }
      .padding()
      .onChange(of: appData.response) {
         position.scrollTo(edge: .bottom)
      }
      .onAppear {
         if let id = conversationID {
            // Load old conversation
            appData.loadConversation(dbContext: dbContext, conversationID: id)
         } else {
            // Create new conversation
            appData.createConversation(dbContext: dbContext)
         }
      }
   }
}