import SwiftUI

struct NewHomeTab: View {
    @ObservedObject var viewModel: NewHomeTabViewModel
    
    private var column1Posts: [Post] {
        viewModel.posts.enumerated().filter { $0.offset % 2 == 0 }.map { $0.element }
    }
    
    private var column2Posts: [Post] {
        viewModel.posts.enumerated().filter { $0.offset % 2 != 0 }.map { $0.element }
    }
    
    var body: some View {
        VStack {
            if viewModel.isLoading {
                ProgressView("Загрузка ленты...")
            } else {
                RefreshableScrollView(isRefreshing: $viewModel.isRefreshing, onRefresh: {
                    viewModel.refreshData()
                }) {
                    HStack(alignment: .top, spacing: 6) {
                        LazyVStack(spacing: 6) {
                            ForEach(column1Posts) { post in
                                PostGridItem(post: post)
                            }
                        }
                        LazyVStack(spacing: 6) {
                            ForEach(column2Posts) { post in
                                PostGridItem(post: post)
                            }
                        }
                    }
                    .padding(.horizontal, 4)
                }
            }
        }
        .onAppear {
            viewModel.fetchDataIfNeeded()
        }
        .background(Color(.secondarySystemBackground)) // Фон для всей вкладки
    }
}

struct PostGridItem: View {
    let post: Post
    
    private var randomHeight: CGFloat {
        CGFloat.random(in: 150...300)
    }

    var body: some View {
        VStack(alignment: .leading, spacing: 0) { // Убираем отступ между картинкой и текстом
            // 1. Медиа контент
            if let _ = post.media.first {
                Image("placeholderPhoto")
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .frame(height: randomHeight)
            }
            
            // Контейнер для текста, который создает эффект "расширения"
            VStack(alignment: .leading, spacing: 8) {
                // 2. Название поста
                if let title = post.title, !title.isEmpty {
                    Text(title)
                        .font(.subheadline)
                        .lineLimit(2)
                }
                
                // 3. Информация об авторе и лайки
                HStack {
                    
                    Button(action: {
                        // пока ничего не делаем
                    }) {
                        HStack(spacing: 4) {
                        Image(systemName: "person.circle.fill")
                            .resizable()
                            .frame(width: 20, height: 20)
                            .foregroundColor(.gray)
                        Text(post.authorUsername)
                            .font(.footnote)
                            .lineLimit(1)
                            .foregroundColor(.primary)
                    }
                    }
                    .contentShape(Rectangle())

                    Spacer()

                    Button(action: {
                        // пока ничего не делаем
                    }) {
                        HStack(spacing: 4) {
                        Image(systemName: post.isLikedByCurrentUser ? "heart.fill" : "heart")
                            .foregroundColor(post.isLikedByCurrentUser ? .red : .primary)
                        Text("\(post.likes)")
                            .font(.subheadline)
                            .foregroundColor(.primary)
                    }
                    }
                    .contentShape(Rectangle())
                    
                }
            }
            .padding(8)
            .background(Color(UIColor.systemBackground)) // Фон только для текстовой части
        }
        .cornerRadius(6) // Закругляем всю карточку
        .clipped() // Обрезаем дочерние вью по закругленной форме родителя
        .shadow(color: Color.black.opacity(0.1), radius: 5, x: 0, y: 2)
    }
}
