/**
 * @file
 * Interface of class HBCore.
 */

#import <Cocoa/Cocoa.h>

extern const NSString *HBStateIdle;
extern const NSString *HBStateScanning;
extern const NSString *HBStateScanDone;
extern const NSString *HBStateWorking;
extern const NSString *HBStatePaused;
extern const NSString *HBStateWorkDone;
extern const NSString *HBStateMuxing;
extern const NSString *HBStateAll;

extern NSString *HBCoreScanningNotification;
extern NSString *HBCoreScanDoneNotification;
extern NSString *HBCoreWorkingNotification;
extern NSString *HBCorePausedNotification;
extern NSString *HBCoreWorkDoneNotification;
extern NSString *HBCoreMuxingNotification;

/**
 * HBCore is an Objective-C interface to the low-level HandBrake library.
 * HBCore monitors state changes of libhb and provides notifications via
 * NSNotificationCenter to any object who needs them. It can also be used
 * to implement properties that can be directly bound to elements of the gui.
 */
@interface HBCore : NSObject
{
    /// Pointer to libhb handle.
    struct hb_handle_s *hb_handle;
    
    /// Pointer to latest state information returned by libhb.
    struct hb_state_s *hb_state;
    
    /// Timer used to poll libhb for state changes.
    NSTimer *updateTimer;

    /// Current state of HBCore; one of the HBState* constants.
    const NSString *state;  
}

- (id)init;
- (BOOL)openInDebugMode:(BOOL)debugMode checkForUpdates:(BOOL)checkForUpdates;
- (BOOL)close;
- (NSString *)state;
- (struct hb_handle_s *)hb_handle;
- (const struct hb_state_s *)hb_state;

@end
