//
//  LiveRoomProfileDialog.swift
//  SodaLive
//
//  Created by klaus on 2023/08/15.
//

import SwiftUI
import Kingfisher

struct LiveRoomProfileDialog: View {
    
    @Binding var isShowing: Bool
    let profileInfo: LiveRoomMember
    let creatorId: Int
    let isSpeaker: Bool
    
    let memberId = UserDefaults.int(forKey: .userId)
    
    var onClickInviteSpeaker: ((Int) -> Void)? = nil
    var onClickChangeListener: ((Int) -> Void)? = nil
    
    var body: some View {
        ZStack {
            Color.black.opacity(0.7).ignoresSafeArea()
                .onTapGesture {
                    isShowing = false
                }
            
            HStack(spacing: 13.3) {
                KFImage(URL(string: profileInfo.profileImage))
                    .cancelOnDisappear(true)
                    .downsampling(
                        size: CGSize(
                            width: 80,
                            height: 116.7
                        )
                    )
                    .resizable()
                    .frame(width: 80, height: 116.7, alignment: .top)
                    .clipped()
                    .cornerRadius(13.3)
                
                VStack(alignment: .leading, spacing: 0) {
                    Text(profileInfo.nickname)
                        .font(.custom(Font.bold.rawValue, size: 20))
                        .foregroundColor(Color(hex: "eeeeee"))
                        .padding(.top, 6.7)
                    
                    Spacer()
                    
                    if isSpeaker {
                        if profileInfo.role == .LISTENER, let onClickInviteSpeaker = onClickInviteSpeaker {
                            Text("스피커로 초대")
                                .font(.custom(Font.medium.rawValue, size: 10))
                                .foregroundColor(.button)
                                .padding(.horizontal, 15.4)
                                .padding(.vertical, 8.3)
                                .background(Color.white)
                                .cornerRadius(13.3)
                                .onTapGesture {
                                    onClickInviteSpeaker(profileInfo.id)
                                    isShowing = false
                                }
                        }
                        
                        if (memberId == creatorId || memberId == profileInfo.id) && profileInfo.id != creatorId && profileInfo.role == .SPEAKER,
                            let onClickChangeListener = onClickChangeListener {
                            Text("리스너로 변경")
                                .font(.custom(Font.medium.rawValue, size: 10))
                                .foregroundColor(.button)
                                .padding(.horizontal, 15.4)
                                .padding(.vertical, 8.3)
                                .background(Color.white)
                                .cornerRadius(13.3)
                                .onTapGesture {
                                    onClickChangeListener(profileInfo.id)
                                    isShowing = false
                                }
                        }
                    }
                }
                .frame(height: 116.7)
                
                Spacer()
            }
            .padding(20)
            .frame(width: screenSize().width - 53.4)
            .background(Color.button)
            .cornerRadius(16.7)
        }
    }
}
