//
//  AppDelegate.swift
//  writeas
//
//  Created by Matt Baer on 12/29/15.
//  Copyright © 2015 A Bunch Tell. All rights reserved.
//

import Cocoa
import Foundation

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var vc: ViewController?

    @IBOutlet weak var filePublishItem: NSMenuItem!
    @IBOutlet weak var nightModeItem: NSMenuItem!
    @IBOutlet weak var formatFontSerifItem: NSMenuItem!
    @IBOutlet weak var formatFontSansItem: NSMenuItem!
    @IBOutlet weak var formatFontMonoItem: NSMenuItem!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Set night mode state
        nightModeItem.state = Int(UserDefaults.standard.string(forKey: "night_mode_state") ?? String(NSOffState))!
        if nightModeItem.state == NSOnState {
            let wc = NSApplication.shared().mainWindow!.windowController as? WindowController
            wc?.toggle(isNight: true)
        }

        // Set font
        let font = Preferences.getFont()
        if font == Preferences.PostFont.serif {
            formatFontSerifItem.state = NSOnState
        } else if font == Preferences.PostFont.sans {
            formatFontSansItem.state = NSOnState
        } else if font == Preferences.PostFont.mono {
            formatFontMonoItem.state = NSOnState
        }
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        vc?.saveDocument()
    }
    
    func applicationDidBecomeActive(_ notification: Notification) {
        if vc == nil {
            vc = NSApplication.shared().mainWindow?.contentViewController as? ViewController
        }

        DispatchQueue.global(qos: .background).async {
            if !FileManager.default.fileExists(atPath: Constants.draftDir, isDirectory: nil) {
                do {
                    try FileManager.default.createDirectory(atPath: Constants.draftDir, withIntermediateDirectories: false, attributes: nil)
                } catch let error as NSError {
                    print(error.localizedDescription);
                }
            }
        }
    }

    @IBAction func toggleNightMode(_ sender: NSMenuItem) {
        let wc = NSApplication.shared().mainWindow!.windowController as? WindowController
        let isOff = sender.state == NSOffState
        wc?.toggle(isNight: isOff)
        sender.state = isOff ? NSOnState : NSOffState
        UserDefaults.standard.set(String(sender.state), forKey: "night_mode_state")
    }

    @IBAction func setFontSerif(_ sender: NSMenuItem) {
        deselectAllFonts()
        sender.state = NSOnState
        vc?.setFont(.serif)
        Preferences.setFont(.serif)
    }

    @IBAction func setFontSans(_ sender: NSMenuItem) {
        deselectAllFonts()
        sender.state = NSOnState
        vc?.setFont(.sans)
        Preferences.setFont(.sans)
    }

    @IBAction func setFontMono(_ sender: NSMenuItem) {
        deselectAllFonts()
        sender.state = NSOnState
        vc?.setFont(.mono)
        Preferences.setFont(.mono)
    }

    func deselectAllFonts() {
        formatFontSerifItem.state = NSOffState
        formatFontSansItem.state = NSOffState
        formatFontMonoItem.state = NSOffState
    }

    @IBAction func saveDocument(_ sender: AnyObject) {
        vc?.saveDocument()
    }

    @IBAction func publishDoc(_ sender: Any) {
        filePublishItem.isEnabled = false
        vc?.publish()
    }

    @IBAction func viewIncTextSize(_ sender: Any) {
        vc?.adjustTextSize(increment: true)
    }

    @IBAction func viewDecTextSize(_ sender: Any) {
        vc?.adjustTextSize(increment: false)
    }
}

