//
//  CommentsView.swift (previously RepliesView.swift)
//  Circles
//
//  Created by Charles Wright on 6/15/21.
//

import SwiftUI
import Matrix

struct CommentsView: View {
    var room: Matrix.Room
    @ObservedObject var parent: Matrix.Message
    @State var newMessageText = ""
    
    func send() async throws -> EventId {
        let eventId = try await room.sendText(text: newMessageText, inReplyTo: parent)
        await MainActor.run {
            self.newMessageText = ""
        }
        return eventId
    }
    
    var body: some View {
        VStack(alignment: .center, spacing: 0) {
            let now = Date()
            let cutoff = now.addingTimeInterval(300.0)
            let allMessages = parent.replies.values
            let messages = allMessages.filter {
                $0.timestamp < cutoff  &&                                     // Filter out messages claiming to be from the future
                !$0.room.session.ignoredUserIds.contains($0.sender.userId)    // Filter out messages from ignored users
            }
            .sorted {
                $0.timestamp < $1.timestamp
            }
            
            Text("Comments")
                .font(
                    Font.custom("Inter", size: 16)
                        .weight(.bold)
                )
                .multilineTextAlignment(.center)
                .foregroundColor(Color.greyCool1100)
                .frame(minHeight: 45, maxHeight: 45)
                .padding(.top, 8)
            
            Divider()
            
            if messages.isEmpty && DebugModel.shared.debugMode {
                Text("No replies")
            }
            

            ScrollView {
                VStack(alignment: .leading, spacing: 4) {
                    ForEach(messages) { message in
                        CommentCard(message: message)
                    }
                }
            }
            .padding(16)

            Divider()
            
            HStack(spacing: 4) {
                Button(action: {
                    // Pick media to attach
                }) {
                    Image(systemName: SystemImages.paperclip.rawValue)
                        .resizable()
                        .frame(width: 32, height: 32)
                }
                .disabled(true)
                
                TextField(text: $newMessageText) {
                    Text("Message")
                }
                .textFieldStyle(.roundedBorder)
                .submitLabel(.send)
                .onSubmit {
                    Task {
                        try await send()
                    }
                }
                
                AsyncButton(action: {
                    try await send()
                }) {
                    Image(systemName: SystemImages.paperplaneFill.rawValue)
                        .resizable()
                        .frame(width: 32, height: 32)
                }
                .disabled(newMessageText.isEmpty)
            }
            .padding(4)
            
        }
    }
}

/*
struct RepliesView_Previews: PreviewProvider {
    static var previews: some View {
        RepliesView()
    }
}
*/