// Copyright © 2015 Abhishek Banthia

import Cocoa

class CenteredTabViewController: NSTabViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // Setup localized tab labels
        tabViewItems.forEach { item in
            if let identifier = item.identifier as? String {
                item.label = NSLocalizedString(identifier, comment: "Tab View Item Label for \(identifier)")
            }
        }
    }
}

class OneWindowController: NSWindowController {
    private static var sharedWindow: OneWindowController!
    private var themeDidChangeNotification: NSObjectProtocol?

    override func windowDidLoad() {
        super.windowDidLoad()
        setup()

        themeDidChangeNotification = NotificationCenter.default.addObserver(forName: .themeDidChangeNotification, object: nil, queue: OperationQueue.main) { _ in

            NSAnimationContext.runAnimationGroup { context in
                context.duration = 1
                context.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
                self.window?.animator().backgroundColor = Themer.shared().mainBackgroundColor()
            }

            self.setupToolbarImages()
        }
    }

    deinit {
        if let themeDidChangeNotif = themeDidChangeNotification {
            NotificationCenter.default.removeObserver(themeDidChangeNotif)
        }
    }

    private func setup() {
        setupWindow()
        setupToolbarImages()
    }

    private func setupWindow() {
        window?.titlebarAppearsTransparent = true
        window?.backgroundColor = Themer.shared().mainBackgroundColor()
    }

    class func shared() -> OneWindowController {
        if sharedWindow == nil {
            let prefStoryboard = NSStoryboard(name: "Preferences", bundle: nil)
            sharedWindow = prefStoryboard.instantiateInitialController() as? OneWindowController
        }
        return sharedWindow
    }

    func openPermissions() {
        guard let window = window else {
            return
        }

        if !window.isMainWindow || !window.isVisible {
            showWindow(nil)
        }

        guard let tabViewController = contentViewController as? CenteredTabViewController else {
            return
        }

        tabViewController.selectedTabViewItemIndex = 3
    }

    private func setupToolbarImages() {
        guard let tabViewController = contentViewController as? CenteredTabViewController else {
            return
        }

        let themer = Themer.shared()
        let identifierTOImageMapping: [String: NSImage] = ["Appearance Tab": themer.appearanceTabImage(),
                                                           "Calendar Tab": themer.calendarTabImage(),
                                                           "Permissions Tab": themer.privacyTabImage()]

        tabViewController.tabViewItems.forEach { tabViewItem in
            let identity = (tabViewItem.identifier as? String) ?? ""
            if identifierTOImageMapping[identity] != nil {
                tabViewItem.image = identifierTOImageMapping[identity]
            }
        }
    }
}