//
//  MainView.swift
//  VolnahubApp
//
//  Created by cheykrym on 09/06/2025.
//

import SwiftUI

struct MainView: View {
    @ObservedObject var viewModel: LoginViewModel
    @State private var selectedTab: Int = 0
    @StateObject private var newHomeTabViewModel = NewHomeTabViewModel()
    
    // Состояния для TopBarView
    @State private var selectedAccount = "@user1"
    @State private var accounts = ["@user1", "@user2", "@user3"]
    @State private var sheetType: ProfileTab.SheetType? = nil
    
    // Состояния для скрытия TopBar
    @State private var topBarVisible = true
    @State private var lastScrollY: CGFloat = 0

    private var tabTitle: String {
        switch selectedTab {
        case 0:
            return "Home"
        case 1:
            return "Search"
        case 2:
            return "Chats"
        case 3:
            return "Profile"
        default:
            return "Home"
        }
    }

    var body: some View {
        NavigationView {
            VStack(spacing: 0) {
                if topBarVisible {
                    TopBarView(
                        title: tabTitle,
                        selectedAccount: $selectedAccount,
                        sheetType: $sheetType,
                        accounts: accounts,
                        viewModel: viewModel
                    )
                    .transition(AnyTransition.move(edge: .top).combined(with: .opacity))
                }
                
                ZStack {
                    switch selectedTab {
                    case 0:
//                        HomeTab(onScroll: handleScroll)
                        NewHomeTab(viewModel: newHomeTabViewModel)
                    case 1:
                        SearchTab() // SearchTab не имеет скролла, поэтому onScroll не нужен
                    case 2:
                        ChatsTab() // ChatsTab тоже
                    case 3:
                        ProfileTab(
                            viewModel: viewModel,
                            sheetType: $sheetType,
                            selectedAccount: $selectedAccount,
                            accounts: $accounts,
                            onScroll: handleScroll
                        )
                    default:
                        HomeTab(onScroll: handleScroll)
                    }
                }
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                
                if topBarVisible {
                CustomTabBar(selectedTab: $selectedTab) {
                    print("Create button tapped")
                }
                }
            }
            .ignoresSafeArea(edges: .bottom)
            .navigationBarHidden(true)
            .sheet(item: $sheetType) { type in
                switch type {
                case .accountShare:
                    AccountShareSheet(
                        isPresented: Binding(
                            get: { sheetType != nil },
                            set: { if !$0 { sheetType = nil } }
                        ),
                        selectedAccount: $selectedAccount,
                        accounts: accounts
                    )
                }
            }
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
    
    private func handleScroll(offset: CGPoint) {
        let currentY = offset.y
        
        // Показываем бар, если скроллим вверх или дошли до верха
//        if currentY < lastScrollY || currentY <= 0 {
//            if !topBarVisible {
//                withAnimation(.default) {
//                    topBarVisible = true
//                }
//            }
//        }
//        // Скрываем, если скроллим вниз и отступили от верха
//        else if currentY > lastScrollY && currentY > 50 {
//            if topBarVisible {
//                withAnimation(.default) {
//                    topBarVisible = false
//                }
//            }
//        }
        
        lastScrollY = currentY
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        let mockViewModel = LoginViewModel()
        MainView(viewModel: mockViewModel)
    }
}
