//
//  SendToCommand.swift
//  RSCore
//
//  Created by Brent Simmons on 1/8/18.
//  Copyright © 2018 Ranchero Software. All rights reserved.
//

#if os(macOS)
import AppKit
#endif

#if os(iOS)
import UIKit
#endif

/// A type that sends an object's data to an external application.
///
/// Unlike UndoableCommand commands, you instantiate one of each of these and reuse them.
///
/// See NetNewsWire.

public protocol SendToCommand {

	/// The title of the command.
	///
	/// Often the name of the target application.
	var title: String { get }
	/// The image for the command.
	///
	/// Often the icon of the target application.
	var image: RSImage? { get }

	/// Determine whether an object can be sent to the target application.
	///
	/// - Parameters:
	///   - object: The object to test.
	///   - selectedText: The currently selected text.
	/// - Returns: `true` if the object can be sent, `false` otherwise.
	func canSendObject(_ object: Any?, selectedText: String?) -> Bool

	/// Send an object to the target application.
	///
	///	- Parameters:
	///   - object: The object whose data to send.
	///   - selectedText: The currently selected text.
	func sendObject(_ object: Any?, selectedText: String?)
}

