//
//  RankingView.swift
//  AllIn
//
//  Created by Emre on 27/09/2023.
//

import SwiftUI

struct RankingView: View {
    
    @Binding var showMenu: Bool
    @StateObject var viewModel = RankingViewModel()
    
    var body: some View {
        GeometryReader { geometry in
            VStack(alignment: .center, spacing: 0) {
                TopBar(showMenu: self.$showMenu)
                Text("ranking_title")
                    .textStyle(weight: .bold, color: AllInColors.grey500Color, size: 25)
                    .padding([.top,.bottom], 15)
                
                HStack {
                    if viewModel.friends.indices.contains(0) {
                        ZStack {
                            VStack(spacing: 0) {
                                Spacer()
                                Text(viewModel.friends[0].username)
                                    .fontWeight(.bold)
                                    .padding(.bottom, 4)
                                    .font(.system(size: 16))
                                    .lineLimit(1)
                                Divider()
                                    .background(AllInColors.lightGrey100Color)
                                HStack {
                                    Spacer()
                                    Image("allcoinIcon")
                                        .resizable()
                                        .frame(width: 18, height: 18, alignment: .leading)
                                        .padding([.top, .bottom], 10)
                                    Text(String(viewModel.friends[0].nbCoins))
                                        .textStyle(weight: .black, color: AllInColors.lightPurpleColor, size: 16)
                                        .padding(.trailing, 18)
                                    Spacer()
                                }
                                .frame(width: geometry.size.width * 0.43)
                                .background(AllInColors.underComponentBackgroundColor)
                            }
                            .frame(width: geometry.size.width * 0.43, height: 120)
                            .background(AllInColors.componentBackgroundColor)
                            .cornerRadius(41.5, corners: .topLeft)
                            .cornerRadius(8, corners: .topRight)
                            .cornerRadius(15, corners: [.bottomLeft, .bottomRight])
                            UserPicture(picture: viewModel.friends[0].image, username: viewModel.friends[0].username, size: 70)
                                .offset(x: 0, y: -55)
                            
                            Text("1")
                                .frame(width: 28, height: 28)
                                .foregroundColor(.white)
                                .background(AllInColors.lightPurpleColor)
                                .cornerRadius(30)
                                .font(.system(size: 18))
                                .fontWeight(.bold)
                                .offset(x: 0, y: -23)
                        }
                    }
                    if viewModel.friends.indices.contains(1) {
                        ZStack {
                            VStack(spacing: 0) {
                                Spacer()
                                Text(viewModel.friends[1].username)
                                    .fontWeight(.bold)
                                    .padding(.bottom, 4)
                                    .font(.system(size: 15))
                                    .lineLimit(1)
                                Divider()
                                    .background(AllInColors.lightGrey100Color)
                                HStack {
                                    Spacer()
                                    Image("allcoinIcon")
                                        .resizable()
                                        .frame(width: 18, height: 18, alignment: .leading)
                                        .padding([.top, .bottom], 10)
                                    Text(String(viewModel.friends[1].nbCoins))
                                        .textStyle(weight: .black, color: AllInColors.lightPurpleColor, size: 16)
                                        .padding(.trailing, 18)
                                    Spacer()
                                }
                                .frame(width: geometry.size.width * 0.43)
                                .background(AllInColors.underComponentBackgroundColor)
                            }
                            .frame(width: geometry.size.width * 0.43, height: 90)
                            .background(AllInColors.componentBackgroundColor)
                            .cornerRadius(27.5, corners: .topRight)
                            .cornerRadius(8, corners: .topLeft)
                            .cornerRadius(15, corners: [.bottomLeft, .bottomRight])
                            
                            UserPicture(picture: viewModel.friends[1].image, username: viewModel.friends[1].username, size: 50)
                                .offset(x: 0, y: -50)
                            
                            Text("2")
                                .frame(width: 20, height: 20)
                                .foregroundColor(.white)
                                .background(AllInColors.lightPurpleColor)
                                .cornerRadius(30)
                                .font(.system(size: 14))
                                .fontWeight(.bold)
                                .offset(x: 0, y: -28)
                        }
                        .padding(.top, 28)
                    }
                }
                .padding([.leading, .trailing, .top], 20)
                
                if viewModel.friends.count == 1 {
                    EmptyInfo(emoji:"👀", title: String(localized: "empty_ranking_title"), explain: String(localized: "empty_ranking_explain")).padding(.top, 40)

                }
                else{
                    ScrollView(showsIndicators: false) {
                        ForEach(viewModel.friends.indices.dropFirst(2), id: \.self) { index in
                            let friend = viewModel.friends[index]
                            RankingRow(
                                number: index + 1,
                                image: friend.image,
                                pseudo: friend.username,
                                allCoins: friend.nbCoins
                            )
                        }
                    }
                    .padding(.top, 10)
                    .padding(.horizontal, 20)
                }
                Spacer()
            }
            .edgesIgnoringSafeArea(.bottom).background(AllInColors.backgroundColor)
        }
    }
}
