// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.

import SwiftUI
import SessionUIKit
import SessionSnodeKit

struct MessageInfoView: View {
    var actions: [ContextMenuVC.Action]
    var messageViewModel: MessageViewModel
    
    var body: some View {
        ZStack (alignment: .topLeading) {
            if #available(iOS 14.0, *) {
                Color.black.ignoresSafeArea()
            } else {
                Color.black
            }
            
            ScrollView(.vertical, showsIndicators: false) {
                VStack(
                    alignment: .leading,
                    spacing: 10
                ) {
                    // Message bubble snapshot
                    if let body: String = messageViewModel.body {
                        ZStack {
                            RoundedRectangle(cornerRadius: 18)
                                .fill(Color(red: 49.0/255, green: 241.0/255, blue: 150.0/255))
                            
                            Text(body)
                                .padding(
                                    EdgeInsets(
                                        top: 8,
                                        leading: 16,
                                        bottom: 8,
                                        trailing: 16
                                    )
                                )
                        }
                        .frame(
                            maxWidth: .infinity,
                            maxHeight: .infinity,
                            alignment: .topLeading
                        )
                        .fixedSize(horizontal: true, vertical: true)
                        .padding(
                            EdgeInsets(
                                top: 8,
                                leading: 30,
                                bottom: 4,
                                trailing: 30
                            )
                        )
                    }
                    
                    // TODO: Attachment carousel view
                    SessionCarouselView_SwiftUI(contentInfos: [.orange, .gray, .blue, .yellow])
                        .frame(
                            maxWidth: .infinity,
                            maxHeight: .infinity,
                            alignment: .topLeading
                        )
                        .padding(
                            EdgeInsets(
                                top: 4,
                                leading: 0,
                                bottom: 4,
                                trailing: 0
                            )
                        )
                    
                    // Attachment Info
                    if (messageViewModel.attachments?.isEmpty != false) {
                        ZStack {
                            RoundedRectangle(cornerRadius: 17)
                                .fill(Color(red: 27.0/255, green: 27.0/255, blue: 27.0/255))
                                
                            VStack(
                                alignment: .leading,
                                spacing: 16
                            ) {
                                VStack(
                                    alignment: .leading,
                                    spacing: 4
                                ) {
                                    Text("ATTACHMENT_INFO_FILE_ID".localized() + ":")
                                        .bold()
                                        .font(.system(size: 18))
                                        .foregroundColor(.white)
                                    Text("12378965485235985214")
                                        .font(.system(size: 16))
                                        .foregroundColor(.white)
                                }
                                
                                HStack(
                                    alignment: .center,
                                    spacing: 48
                                ) {
                                    VStack(
                                        alignment: .leading,
                                        spacing: 4
                                    ) {
                                        Text("ATTACHMENT_INFO_FILE_TYPE".localized() + ":")
                                            .bold()
                                            .font(.system(size: 18))
                                            .foregroundColor(.white)
                                        Text(".PNG")
                                            .font(.system(size: 16))
                                            .foregroundColor(.white)
                                    }
                                    
                                    Spacer()
                                    
                                    VStack(
                                        alignment: .leading,
                                        spacing: 4
                                    ) {
                                        Text("ATTACHMENT_INFO_FILE_SIZE".localized() + ":")
                                            .bold()
                                            .font(.system(size: 18))
                                            .foregroundColor(.white)
                                        Text("6mb")
                                            .font(.system(size: 16))
                                            .foregroundColor(.white)
                                    }
                                    
                                    Spacer()
                                }

                                HStack(
                                    alignment: .center,
                                    spacing: 48
                                ) {
                                    VStack(
                                        alignment: .leading,
                                        spacing: 4
                                    ) {
                                        Text("ATTACHMENT_INFO_RESOLUTION".localized() + ":")
                                            .bold()
                                            .font(.system(size: 18))
                                            .foregroundColor(.white)
                                        Text("550×550")
                                            .font(.system(size: 16))
                                            .foregroundColor(.white)
                                    }
                                    
                                    Spacer()
                                    
                                    VStack(
                                        alignment: .leading,
                                        spacing: 4
                                    ) {
                                        Text("ATTACHMENT_INFO_DURATION".localized() + ":")
                                            .bold()
                                            .font(.system(size: 18))
                                            .foregroundColor(.white)
                                        Text("N/A")
                                            .font(.system(size: 16))
                                            .foregroundColor(.white)
                                    }
                                    
                                    Spacer()
                                }
                            }
                            .frame(
                                maxWidth: .infinity,
                                maxHeight: .infinity,
                                alignment: .topLeading
                            )
                            .padding(
                                EdgeInsets(
                                    top: 16,
                                    leading: 16,
                                    bottom: 16,
                                    trailing: 16
                                )
                            )
                        }
                        .frame(maxHeight: .infinity)
                        .fixedSize(horizontal: false, vertical: true)
                        .padding(
                            EdgeInsets(
                                top: 4,
                                leading: 30,
                                bottom: 4,
                                trailing: 30
                            )
                        )
                    }

                    // Message Info
                    ZStack {
                        RoundedRectangle(cornerRadius: 17)
                            .fill(Color(red: 27.0/255, green: 27.0/255, blue: 27.0/255))
                            
                        VStack(
                            alignment: .leading,
                            spacing: 16
                        ) {
                            VStack(
                                alignment: .leading,
                                spacing: 4
                            ) {
                                Text("Sent:")
                                    .bold()
                                    .font(.system(size: 18))
                                    .foregroundColor(.white)
                                Text(messageViewModel.dateForUI.fromattedForMessageInfo)
                                    .font(.system(size: 16))
                                    .foregroundColor(.white)
                            }

                            VStack(
                                alignment: .leading,
                                spacing: 4
                            ) {
                                Text("Received:")
                                    .bold()
                                    .font(.system(size: 18))
                                    .foregroundColor(.white)
                                Text(messageViewModel.receivedDateForUI.fromattedForMessageInfo)
                                    .font(.system(size: 16))
                                    .foregroundColor(.white)
                            }

                            VStack(
                                alignment: .leading,
                                spacing: 4
                            ) {
                                Text("From:")
                                    .bold()
                                    .font(.system(size: 18))
                                    .foregroundColor(.white)
                                HStack(
                                    spacing: 10
                                ) {
                                    Circle()
                                        .frame(
                                            width: 46,
                                            height: 46,
                                            alignment: .topLeading
                                        )
                                        .foregroundColor(Color(red: 49.0/255, green: 241.0/255, blue: 150.0/255))
    //                                ProfilePictureSwiftUI(size: .message)
                                        
                                        
                                    VStack(
                                        alignment: .leading,
                                        spacing: 4
                                    ) {
                                        Text(messageViewModel.senderName ?? "Tester")
                                            .bold()
                                            .font(.system(size: 18))
                                            .foregroundColor(.white)
                                        Text(messageViewModel.authorId)
                                            .font(.system(size: 16))
                                            .foregroundColor(.white)
                                    }
                                }
                            }
                        }
                        .frame(
                            maxWidth: .infinity,
                            maxHeight: .infinity,
                            alignment: .topLeading
                        )
                        .padding(
                            EdgeInsets(
                                top: 16,
                                leading: 16,
                                bottom: 16,
                                trailing: 16
                            )
                        )
                    }
                    .frame(maxHeight: .infinity)
                    .fixedSize(horizontal: false, vertical: true)
                    .padding(
                        EdgeInsets(
                            top: 4,
                            leading: 30,
                            bottom: 4,
                            trailing: 30
                        )
                    )

                    // Actions
        //            ZStack {
        //                RoundedRectangle(cornerRadius: 8)
        //                VStack {
        //                    ForEach(
        //                        0...(actions.count - 1),
        //                        id: \.self
        //                    ) { index in
        //                        HStack {
        //                            Image(uiImage: actions[index].icon!)
        //                            Text(actions[index].title)
        //                        }
        //                    }
        //                }
        //            }
                }
            }
        }
    }
}

struct MessageInfoView_Previews: PreviewProvider {
    static var previews: some View {
        MessageInfoView(
            actions: [],
            messageViewModel: MessageViewModel(
                threadId: "d4f1g54sdf5g1d5f4g65ds4564df65f4g65d54gdfsg",
                threadVariant: .contact,
                threadHasDisappearingMessagesEnabled: false,
                threadOpenGroupServer: nil,
                threadOpenGroupPublicKey: nil,
                threadContactNameInternal: "Test",
                timestampMs: SnodeAPI.currentOffsetTimestampMs(),
                receivedAtTimestampMs: SnodeAPI.currentOffsetTimestampMs(),
                authorId: "d4f1g54sdf5g1d5f4g65ds4564df65f4g65d54gdfsg",
                authorNameInternal: "Test",
                body: "Test Message",
                expiresStartedAtMs: nil,
                expiresInSeconds: nil,
                isSenderOpenGroupModerator: false,
                currentUserProfile: Profile.fetchOrCreateCurrentUser(),
                quote: nil,
                quoteAttachment: nil,
                linkPreview: nil,
                linkPreviewAttachment: nil,
                attachments: nil
            )
        )
    }
}