//
//  applicationPreferences.m
//  
//
//  Created by Tue Topholm on 31/01/11.
//  Copyright 2011 Sugee. All rights reserved.
//
// THIS HAVEN'T BEEN TESTED WITH CHILD PANELS YET.

#import "applicationPreferences.h"


@implementation applicationPreferences



- (void)getSetting:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options
{
	NSString* callbackID = [arguments pop];
	NSString* jsString;

        
		NSString *settingsName = [options objectForKey:@"key"];
        CDVPluginResult* result = nil;
	
		@try 
		{
			//At the moment we only return strings
			//bool: true = 1, false=0
			NSString *returnVar = [[NSUserDefaults standardUserDefaults] stringForKey:settingsName];
			if(returnVar == nil)
			{
				returnVar = [self getSettingFromBundle:settingsName]; //Parsing Root.plist
				
				if (returnVar == nil) 
					@throw [NSException exceptionWithName:nil reason:@"Key not found" userInfo:nil];;
			}
			result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:returnVar];
			jsString = [result toSuccessCallbackString:callbackID];		
		}
		@catch (NSException * e) 
		{
			result = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT messageAsString:[e reason]];
            jsString = [result toErrorCallbackString:callbackID];
		}
		@finally 
		{
			[self writeJavascript:jsString]; //Write back to JS
		}
}

- (void)setSetting:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options
{
    NSString* callbackID = [arguments pop];
	NSString* jsString;    
    CDVPluginResult* result;

    NSString *settingsName = [options objectForKey:@"key"];
    NSString *settingsValue = [options objectForKey:@"value"];

		
    @try 
    {
        [[NSUserDefaults standardUserDefaults] setValue:settingsValue forKey:settingsName];
        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
        jsString = [result toSuccessCallbackString:callbackID];
			
    }
    @catch (NSException * e) 
    {
        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT messageAsString:[e reason]];
        jsString = [result toErrorCallbackString:callbackID];
    }
    @finally 
    {
        [self writeJavascript:jsString]; //Write back to JS
    }
}
/*
  Parsing the Root.plist for the key, because there is a bug/feature in Settings.bundle
  So if the user haven't entered the Settings for the app, the default values aren't accessible through NSUserDefaults.
*/


- (NSString*)getSettingFromBundle:(NSString*)settingsName
{
	NSString *pathStr = [[NSBundle mainBundle] bundlePath];
	NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@"Settings.bundle"];
	NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@"Root.plist"];
	
	NSDictionary *settingsDict = [NSDictionary dictionaryWithContentsOfFile:finalPath];
	NSArray *prefSpecifierArray = [settingsDict objectForKey:@"PreferenceSpecifiers"];
	NSDictionary *prefItem;
	for (prefItem in prefSpecifierArray)
	{
		if ([[prefItem objectForKey:@"Key"] isEqualToString:settingsName]) 
			return [prefItem objectForKey:@"DefaultValue"];		
	}
	return nil;
	
}
@end