//
// «GLUE_NAME»
// «APP_NAME» «APP_VERSION»
// «FRAMEWORK_NAME» «FRAMEWORK_VERSION»
// «AEBGLUE_COMMAND»
//

#import <Foundation/Foundation.h>
#import "AppleEventBridge/AppleEventBridge.h"


// Generic specifier roots. These can be used to construct «PREFIX»Specifiers for use in other «PREFIX»Specifiers and «PREFIX»Commands,
// though only real specifiers constructed from a «PREFIX»Application can be used to send commands to the target application.

#define «PREFIX»App ([[«PREFIX»Specifier alloc] initWithAppData: nil aemQuery: AEMApp])
#define «PREFIX»Con ([[«PREFIX»Specifier alloc] initWithAppData: nil aemQuery: AEMCon])
#define «PREFIX»Its ([[«PREFIX»Specifier alloc] initWithAppData: nil aemQuery: AEMIts])

// Symbol namespace
#define «PREFIX» «PREFIX»Symbol

// TO DO: rename/alias Application class, c.f. Swift glue


// Classes

@interface «PREFIX»Formatter : AEBObjCFormatter
@end


@interface «PREFIX»Symbol : AEBObjCSymbol
// Types and properties
«+ENUM_SYMBOL»
+ (AEBSymbol *)«NAME»;
«-ENUM_SYMBOL»
// Enumerators
«+TYPE_SYMBOL»
+ (AEBSymbol *)«NAME»;
«-TYPE_SYMBOL»
@end

«+COMMAND»

@interface «PREFIX»«CAP_NAME»Command : AEBObjCCommand
«+PARAMETER»
- (instancetype)«NAME»:(id)value;
«-PARAMETER»
@end
«-COMMAND»


@interface «PREFIX»Specifier : AEBObjCSpecifier
// Properties
«+PROPERTY_SPECIFIER»
- (instancetype)«NAME»;
«-PROPERTY_SPECIFIER»
// Elements
«+ELEMENTS_SPECIFIER»
- (instancetype)«NAME»;
«-ELEMENTS_SPECIFIER»
// Commands
«+COMMAND»
- («PREFIX»«CAP_NAME»Command *)«COMMAND_NAME»;
- («PREFIX»«CAP_NAME»Command *)«COMMAND_NAME»:(id)directParameter;
«-COMMAND»
@end


@interface «PREFIX»Application : «PREFIX»Specifier
- (instancetype)initWithTargetType:(AEBTargetType)targetType_ data:(id)targetData_; // private; used internally
// initialisers
+ (instancetype)application;
+ (instancetype)currentApplication;
+ (instancetype)applicationWithName:(NSString *)name;
+ (instancetype)applicationWithURL:(NSURL *)url;
+ (instancetype)applicationWithBundleID:(NSString *)bundleID;
+ (instancetype)applicationWithProcessID:(pid_t)pid;
+ (instancetype)applicationWithDescriptor:(NSAppleEventDescriptor *)desc;
- (instancetype)init;
- (instancetype)initCurrentApplication;
- (instancetype)initWithName:(NSString *)name;
- (instancetype)initWithURL:(NSURL *)url;
- (instancetype)initWithBundleID:(NSString *)bundleID;
- (instancetype)initWithProcessID:(pid_t)pid;
- (instancetype)initWithDescriptor:(NSAppleEventDescriptor *)desc;
// misc
- («PREFIX»Specifier *)customRoot:(id)object;
@end


