//
//  AppDelegate.swift
//  WOKA
//
//  Created by MacBook Pro on 25/04/24.
//

import UIKit
import Lottie
import IQKeyboardManagerSwift
import JWPlayerKit
import Firebase
import GoogleMobileAds
import OneSignalFramework

let appDelegate = UIApplication.shared.delegate as! AppDelegate

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    var deviceOrientation = UIInterfaceOrientationMask.portrait

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        return deviceOrientation
    }
    
    private func registerCustomFonts() {
        let fonts = Bundle.main.urls(forResourcesWithExtension: "ttf", subdirectory: nil)
        fonts?.forEach { url in
            CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
        }
    }
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        //Initialize Firebase
        FirebaseApp.configure()
        
        // Initialize the Google Mobile Ads SDK.
        GADMobileAds.sharedInstance().start(completionHandler: nil)
        
        // enabling the IQKeyboard manager instance
        IQKeyboardManager.shared.enable = true
        IQKeyboardManager.shared.resignOnTouchOutside = true
//        IQKeyboardManager.shared.enableAutoToolbar = false
//        IQKeyboardManager.shared.layoutIfNeededOnUpdate = true
//        registerCustomFonts()
        
        // Set the authentication ID Pass after app starts
        AuthFunc.shareInstance.setAuthIDPass()
        
        UNUserNotificationCenter.current().delegate = self
        
        // OneSignal initialization
        OneSignal.initialize("f9674e6f-75fb-49e8-8379-4f2ed2a880b8", withLaunchOptions: launchOptions)
        OneSignal.Notifications.requestPermission()
        // Add your AppDelegate as an obsserver
        OneSignal.Notifications.addClickListener(self)
        OneSignal.Notifications.addForegroundLifecycleListener(self)
        
        // Set the toast defaults
        setupToast()
        
        //Lottie Config to handle rendering
        LottieConfiguration.shared.renderingEngine = .mainThread
        
        //Configure and modify the side bar
        configureSideBar()
        
        //Configure JWPlayer Liscense
        JWPlayerKitLicense.setLicenseKey("Lgok1t7H4PKY+M8FZqmCx54ibUF+NeCTn+xgd+/LVTaRdc+L")
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }

}

extension AppDelegate {
    // MARK: - Toast Setup
    
    private func setupToast(){
        var style = ToastStyle()
        style.displayShadow = true
        style.messageColor = UIColor.white
        style.backgroundColor = UIColor.appColor(.TextDarkBlue)!
        style.messageFont = FontCustom.shareInstance.customFont(fontName: .Exo2_Medium, size: 16)
        style.titleAlignment = .center
        style.messageAlignment = .center
        style.cornerRadius = 10
        ToastManager.shared.style = style
        
        // toggle "tap to dismiss" functionality
        ToastManager.shared.isTapToDismissEnabled = false
        
        // toggle queueing behavior
        ToastManager.shared.isQueueEnabled = false
    }
    
    // MARK: - Configure Sidebar

    final private func configureSideBar(){
        SideMenuController.preferences.basic.menuWidth = UIScreen.main.bounds.width - 79
        SideMenuController.preferences.animation.shadowAlpha = 0.5
        SideMenuController.preferences.basic.direction = .right
        SideMenuController.preferences.basic.enableRubberEffectWhenPanning = true
        SideMenuController.preferences.basic.position = .above
        SideMenuController.preferences.basic.enablePanGesture = true
        SideMenuController.preferences.basic.enablePanGesture = true
        SideMenuController.preferences.basic.defaultCacheKey = "default"
        SideMenuController.preferences.animation.hideDuration = 0.6
        SideMenuController.preferences.animation.revealDuration = 0.6
    }
}


// MARK: - Notification Click Handler

extension AppDelegate : OSNotificationClickListener, OSNotificationLifecycleListener, UNUserNotificationCenterDelegate{
    
    //Handle on click event
    func onClick(event: OSNotificationClickEvent) {
//        print("event")
        // Respond to notification click
    }
    
    func onWillDisplay(event: OSNotificationWillDisplayEvent) {
        print("Will Display")
    }
}
