//
//  CreatorCommunityCommentReplyView.swift
//  SodaLive
//
//  Created by klaus on 2023/12/20.
//

import SwiftUI
import Kingfisher

struct CreatorCommunityCommentReplyView: View {
    
    let creatorId: Int
    let postId: Int
    let parentComment: GetCommunityPostCommentListItem
    
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    @StateObject var viewModel = CreatorCommunityCommentReplyViewModel()
    
    @State private var commentId: Int = 0
    @State private var isShowDeletePopup: Bool = false
    
    @State private var memberId: Int = 0
    @State private var isShowMemberProfilePopup: Bool = false
    
    var body: some View {
        ZStack {
            VStack(spacing: 0) {
                HStack(spacing: 6.7) {
                    Image("ic_back")
                    
                    Text("답글")
                        .font(.custom(Font.medium.rawValue, size: 14.7))
                        .foregroundColor(.white)
                    
                    Spacer()
                }
                .padding(.horizontal, 13.3)
                .padding(.top, 12)
                .onTapGesture { presentationMode.wrappedValue.dismiss() }
                
                Rectangle()
                    .foregroundColor(Color(hex: "595959"))
                    .frame(height: 0.5)
                    .padding(.top, 12)
                    .padding(.bottom, 13.3)
                    .padding(.horizontal, 13.3)
                
                HStack(spacing: 8) {
                    KFImage(URL(string: UserDefaults.string(forKey: .profileImage)))
                        .cancelOnDisappear(true)
                        .downsampling(size: CGSize(width: 33.3, height: 33.3))
                        .resizable()
                        .frame(width: 33.3, height: 33.3)
                        .clipShape(Circle())
                    
                    HStack(spacing: 0) {
                        TextField("댓글을 입력해 보세요.", text: $viewModel.comment)
                            .autocapitalization(.none)
                            .disableAutocorrection(true)
                            .font(.custom(Font.medium.rawValue, size: 13.3))
                            .foregroundColor(Color(hex: "eeeeee"))
                            .accentColor(Color(hex: "3bb9f1"))
                            .keyboardType(.default)
                            .padding(.horizontal, 13.3)
                        
                        Spacer()
                        
                        Image("btn_message_send")
                            .resizable()
                            .frame(width: 35, height: 35)
                            .padding(6.7)
                            .onTapGesture {
                                hideKeyboard()
                                viewModel.createCommunityPostComment(parentId: parentComment.id)
                            }
                    }
                    .background(Color(hex: "232323"))
                    .cornerRadius(10)
                    .overlay(
                        RoundedRectangle(cornerRadius: 10)
                            .strokeBorder(lineWidth: 1)
                            .foregroundColor(Color(hex: "3bb9f1"))
                    )
                    
                    Spacer()
                }
                .padding(.horizontal, 13.3)
                
                Rectangle()
                    .foregroundColor(Color(hex: "595959"))
                    .frame(height: 0.5)
                    .padding(.top, 12)
                    .padding(.bottom, 13.3)
                    .padding(.horizontal, 13.3)
                
                CreatorCommunityCommentItemView(
                    creatorId: creatorId,
                    postId: postId,
                    commentItem: parentComment,
                    isReplyComment: true,
                    isShowPopupMenuButton: false,
                    modifyComment: { _, _ in },
                    onClickDelete: { _ in },
                    onClickProfile: {
                        memberId = $0
                        isShowMemberProfilePopup = true
                    }
                )
                .padding(.horizontal, 26.7)
                .padding(.bottom, 13.3)
                
                ScrollView(.vertical, showsIndicators: false) {
                    LazyVStack(spacing: 13.3) {
                        ForEach(0..<viewModel.commentList.count, id: \.self) { index in
                            let comment = viewModel.commentList[index]
                            CreatorCommunityCommentItemView(
                                creatorId: creatorId,
                                postId: postId,
                                commentItem: comment,
                                isReplyComment: true,
                                isShowPopupMenuButton: true,
                                modifyComment: { commentId, comment in
                                    hideKeyboard()
                                    viewModel.modifyComment(commentId: commentId, postId: postId, comment: comment)
                                },
                                onClickDelete: {
                                    commentId = $0
                                    isShowDeletePopup = true
                                },
                                onClickProfile: {
                                    memberId = $0
                                    isShowMemberProfilePopup = true
                                }
                            )
                            .padding(.horizontal, 26.7)
                            .padding(.leading, 13.3)
                            .onAppear {
                                if index == viewModel.commentList.count - 1 {
                                    viewModel.getCommentList()
                                }
                            }
                        }
                    }
                }
            }
            .navigationTitle("")
            .navigationBarBackButtonHidden()
            
            if isShowDeletePopup && commentId > 0 {
                SodaDialog(
                    title: "댓글 삭제",
                    desc: "삭제하시겠습니까?",
                    confirmButtonTitle: "삭제",
                    confirmButtonAction: {
                        viewModel.modifyComment(commentId: commentId, postId: postId, isActive: false)
                        commentId = 0
                        isShowDeletePopup = false
                    },
                    cancelButtonTitle: "취소",
                    cancelButtonAction: {
                        commentId = 0
                        isShowDeletePopup = false
                    }
                )
            }
            
            if isShowMemberProfilePopup {
                MemberProfileDialog(isShowing: $isShowMemberProfilePopup, memberId: memberId)
            }
            
            if viewModel.isLoading {
                LoadingView()
            }
        }
        .onAppear {
            viewModel.postId = postId
            viewModel.commentId = parentComment.id
            viewModel.getCommentList()
        }
    }
}

struct CreatorCommunityCommentReplyView_Previews: PreviewProvider {
    static var previews: some View {
        CreatorCommunityCommentReplyView(
            creatorId: 0,
            postId: 0,
            parentComment: GetCommunityPostCommentListItem(
                id: 0,
                writerId: 0,
                nickname: "댓글",
                profileUrl: "",
                comment: "부모 댓글입니다.",
                date: "1시간전",
                replyCount: 1
            )
        )
    }
}
