//
//  MainTabView.swift
//  forShip
//
//  Created by Mamoru Sugita on 2023/10/13.
//

import SwiftUI

enum Tab: String, CaseIterable{
    case chat = "tab_chat"
    case task = "tab_task"
    case alert = "tab_notification"
    case menu = "tab_menu"
    
    var title: String{
        ""
    }
}


struct MainTabView: View {
    
    @EnvironmentObject private var selectedTabModel: SelectedTabModel
    @EnvironmentObject private var sceneDelegate: SceneDelegate
    init() {
        let appearance: UITabBarAppearance = UITabBarAppearance()
        appearance.backgroundColor = .clear
        UITabBar.appearance().scrollEdgeAppearance = appearance
        UITabBar.appearance().standardAppearance = appearance
    }
    
    var body: some View {
        @State var isTabShow: Bool = sceneDelegate.tabWindow != nil
        @State var isTaskSel: Bool = selectedTabModel.activeTab == .task
        TabView(selection: $selectedTabModel.activeTab){
            NavigationStack{
                ChatView()
            }
            .tag(Tab.chat)
            
            NavigationStack{
                MapRepresentable()
                    .ignoresSafeArea()
            }
            .tag(Tab.task)
            
            NavigationStack{
                NotificationView()
            }
            .tag(Tab.alert)
        
            NavigationStack{
                MenuView()
            }
            .tag(Tab.menu)
            
        }
        .hideNativeTabBar()
        .sheet(isPresented: .constant(isTaskSel && isTabShow), content: {
            NavigationStack{
                MapTaskView()
            }
            .zIndex(0)
            .presentationDragIndicator(.hidden)
            .presentationDetents([.height(150), .medium, .fraction(0.99)])
            .presentationCornerRadius(15)
            .presentationBackgroundInteraction(.enabled(upThrough: .medium))
            .presentationBackground(ColorSet.BackgroundSecondary.color)
            .interactiveDismissDisabled()
        })
    }
}

struct CustomTabBar: View {
    @EnvironmentObject private var selectedTabModel: SelectedTabModel
    var body: some View {
        VStack(spacing: 0){
            Divider()
            
            HStack(spacing: 0){
                ForEach(Tab.allCases, id: \.rawValue) { tab in
                    Button(action: {
                        selectedTabModel.activeTab = tab
                    }, label: {
                        VStack{
                            Image(selectedTabModel.activeTab == tab ? tab.rawValue + "_selected" : tab.rawValue)
                                .font(.title2)
                            
                            Text(tab.title)
                                .font(.caption)
                            
                        }
                        .frame(maxWidth: .infinity, maxHeight: .infinity)
                        .contentShape(.rect)
                    })
                        
                }
            }
            .frame(height: 50)
        }
        .background(ColorSet.BottomNav.color)
        
    }
}


#Preview {
    MainTabView()
        .environmentObject(SelectedTabModel())
        .environmentObject(SceneDelegate())
}
