//
//  SideMenuViewModel.swift
//  uSTADIUM
//
//  Created by Omar Hegazy on 6/13/24.
//  Copyright © 2024 uSTADIUM. All rights reserved.
//

import SwiftUI
import UIKit

class SideMenuViewModel: ObservableObject {
    @Published var user: UserOBJ?
    @Published var profileOptions: [SideMenuOBJ] = SideMenuRepository.profile()
    @Published var coolStuffOptions: [SideMenuOBJ] = SideMenuRepository.coolStuff()
    @Published var adminOptions: [SideMenuOBJ] = SideMenuRepository.admin()
    @Published var isAdmin: Bool = AuthService.shared.isAdmin
    
    var navigateTo: ((UIViewController) -> Void)?
    
    init() {
        user = AuthService.shared.user
    }
    
    func handleProfileOptionTap(option: SideMenuOBJ) {
        switch option.label {
        case "My Profile":
            if let user = AuthService.shared.user {
                let profileView: UIViewController = UIHostingController(rootView: ProfileView(user: user))
                profileView.extendedLayoutIncludesOpaqueBars = true
                profileView.hidesBottomBarWhenPushed = true
                navigateTo?(profileView)
            }
        case "Edit Profile":
            if let user = AuthService.shared.user {
                let editProfile = EditProfileTableViewController()
                editProfile.hidesBottomBarWhenPushed = true
                editProfile.service = UserPool.shared.request(for: user)
                navigateTo?(UINavigationController(rootViewController: editProfile))
            }
        case "Saved":
            let savedView = UIHostingController(rootView: SavedPostsView())
            navigateTo?(savedView)
        case "Account":
            if let vc = AccountSummaryFeature.getVC() as? UIViewController {
                navigateTo?(vc)
            }
        case "Settings":
            let settingsVC = UIHostingController(rootView: SettingsView())
            settingsVC.isModalInPresentation = true
            navigateTo?(settingsVC)
        case "My Takes History":
            navigateTo?(UIHostingController(rootView: UserTakesHistoryView(historyVM: UserTakesHistoryViewModel(selectedContainer: .liveTakes))))
        default:
            break
        }
    }
    
    func handleCoolStuffOptionTap(option: SideMenuOBJ) {
        if let vc = option.vc {
            navigateTo?(vc)
        }
    }
    
    func handleAdminOptionTap(option: SideMenuOBJ) {
        switch option.label {
        case "Users":
            let usersAdmin = UsersAdminViewController()
            navigateTo?(UINavigationController(rootViewController: usersAdmin))
        case "Takes":
            let takesVC = AdminTakesVC()
            navigateTo?(UINavigationController(rootViewController: takesVC))
        case "Cashout":
            let cashoutVC = CashoutAdminVC()
            navigateTo?(UINavigationController(rootViewController: cashoutVC))
        case "Feature Toggles":
            let toggleView = FeatureTogglesView()
            navigateTo?(UIHostingController(rootView: toggleView))
        case "Promo Codes":
            let promoCodeView = PromoCodeList()
            navigateTo?(UIHostingController(rootView: promoCodeView))
        case "Live Odds":
            let oddsView = UIHostingController(rootView: TheOddsView(pickerVM: OddsPickerViewModel(selectedContainer: .nfl)))
            oddsView.hidesBottomBarWhenPushed = true
            oddsView.extendedLayoutIncludesOpaqueBars = true
            navigateTo?(oddsView)
        default:
            break
        }
    }
}