/*
* Diagnostic_Microphone.m
* Diagnostic Plugin - Microphone Module
*
* Copyright (c) 2018 Working Edge Ltd.
* Copyright (c) 2012 AVANTIC ESTUDIO DE INGENIEROS
*/

#import "Diagnostic_Microphone.h"

@implementation Diagnostic_Microphone

// Internal reference to Diagnostic singleton instance
static Diagnostic* diagnostic;

// Internal constants
static NSString*const LOG_TAG = @"Diagnostic_Microphone[native]";

- (void)pluginInitialize {

[super pluginInitialize];

diagnostic = [Diagnostic getInstance];
}

/********************************/
#pragma mark - Plugin API
/********************************/

- (void) isMicrophoneAuthorized: (CDVInvokedUrlCommand*)command
{
[self.commandDelegate runInBackground:^{
CDVPluginResult* pluginResult;
@try {
AVAudioSessionRecordPermission recordPermission = [AVAudioSession sharedInstance].recordPermission;

if(recordPermission == AVAudioSessionRecordPermissionGranted) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:1];
}
else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:0];
}
[diagnostic sendPluginResultBool:recordPermission == AVAudioSessionRecordPermissionGranted :command];
}
@catch (NSException *exception) {
[diagnostic handlePluginException:exception :command];
};
}];
}

- (void) getMicrophoneAuthorizationStatus: (CDVInvokedUrlCommand*)command
{
[self.commandDelegate runInBackground:^{
@try {
NSString* status;
AVAudioSessionRecordPermission recordPermission = [AVAudioSession sharedInstance].recordPermission;
switch(recordPermission){
case AVAudioSessionRecordPermissionDenied:
status = AUTHORIZATION_DENIED;
break;
case AVAudioSessionRecordPermissionGranted:
status = AUTHORIZATION_GRANTED;
break;
case AVAudioSessionRecordPermissionUndetermined:
status = AUTHORIZATION_NOT_DETERMINED;
break;
}

[diagnostic logDebug:[NSString stringWithFormat:@"Microphone authorization status is: %@", status]];
[diagnostic sendPluginResultString:status:command];
}
@catch (NSException *exception) {
[diagnostic handlePluginException:exception :command];
}
}];
}

- (void) requestMicrophoneAuthorization: (CDVInvokedUrlCommand*)command
{
[self.commandDelegate runInBackground:^{
@try {
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
[diagnostic logDebug:[NSString stringWithFormat:@"Has access to microphone: %d", granted]];
[diagnostic sendPluginResultBool:granted :command];
}];
}
@catch (NSException *exception) {
[diagnostic handlePluginException:exception :command];
}
}];
}

/********************************/
#pragma mark - Internals
/********************************/

@end