//
//  AppNotifications.swift
//  NetNewsWire
//
//  Created by Brent Simmons on 8/30/15.
//  Copyright © 2015 Ranchero Software, LLC. All rights reserved.
//

import Foundation
import Articles

extension Notification.Name {
	
	static let appUnreadCountDidChange = Notification.Name("AppUnreadCountDidChangeNotification")
	static let InspectableObjectsDidChange = Notification.Name("InspectableObjectsDidChangeNotification")
	static let UserDidAddFeed = Notification.Name("UserDidAddFeedNotification")
	static let LaunchedFromExternalAction = Notification.Name("LaunchedFromExternalAction")

	#if !MAC_APP_STORE
		static let WebInspectorEnabledDidChange = Notification.Name("WebInspectorEnabledDidChange")
	#endif
}

struct AppNotificationUserInfoKey {

	static let unreadCount = "unreadCount"
}

extension Notification {

	var unreadCount: Int? {
		guard name == .appUnreadCountDidChange else {
			assertionFailure("This is to be used only with the .appUnreadCountDidChange notification")
			return nil
		}
		guard let userInfo, let count = userInfo[AppNotificationUserInfoKey.unreadCount] as? Int else {
			assertionFailure("Missing unread count in notification")
			return nil
		}
		return count
	}
}

struct AppNotification {

	static func postAppUnreadCountDidChange(from: Any, unreadCount: Int) {
		var userInfo = [AnyHashable: Any]()
		userInfo[AppNotificationUserInfoKey.unreadCount] = unreadCount
		NotificationCenter.default.post(name: .appUnreadCountDidChange, object: from, userInfo: userInfo)
	}
}