//
//  PSMultiValueSpecifierTable.m
//  InAppSettings
//
//  Created by David Keegan on 11/3/09.
//  Copyright 2009 InScopeApps{+}. All rights reserved.
//

#import "InAppSettings.h"
#import "InAppSettingsPSMultiValueSpecifierTable.h"
#import "InAppSettingsConstants.h"

@implementation InAppSettingsPSMultiValueSpecifierTable

@synthesize setting;

- (id) initWithStyle:(UITableViewStyle)style {
  return [super initWithStyle:UITableViewStyleGrouped];
}

- (id) initWithSetting:(InAppSettingsSpecifier *)inputSetting {
  self = [super init];
  if (self != nil) {
    self.setting = inputSetting;
  }
  return self;
}

- (void) viewDidLoad {
  [super viewDidLoad];

  self.title = [self.setting localizedTitle];
}

- (void) dealloc {
  [setting release];
  [super dealloc];
}

#pragma mark Value

- (id) getValue {

  id value;

  if ( self.setting.dataSource != nil )
    value = [self.setting.dataSource objectForKey:[self.setting getKey]];
  else
    value = [[NSUserDefaults standardUserDefaults] valueForKey:[self.setting getKey]];

  if (value == nil) {
    value = [self.setting valueForKey:InAppSettingsSpecifierDefaultValue];
  }
  return value;
}

- (void) setValue:(id)newValue {
  if ( self.setting.dataSource != nil )
    [self.setting.dataSource setObject:newValue forKey:[self.setting getKey]];
  else
    [[NSUserDefaults standardUserDefaults] setObject:newValue forKey:[self.setting getKey]];
}

#pragma mark Table view methods

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
  return 1;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return [[self.setting valueForKey:InAppSettingsSpecifierValues] count];
}

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString * CellIdentifier = @"PSMultiValueSpecifierTableCell";

  UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if (cell == nil) {
        #if InAppSettingsUseNewCells
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        #else
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        #endif
  }

  NSString * cellTitle = InAppSettingsLocalize([[self.setting valueForKey:InAppSettingsSpecifierTitles] objectAtIndex:indexPath.row], self.setting.stringsTable);
  id cellValue = [[self.setting valueForKey:InAppSettingsSpecifierValues] objectAtIndex:indexPath.row];
    #if InAppSettingsUseNewCells
  cell.textLabel.text = cellTitle;
    #else
  cell.text = cellTitle;
    #endif
  if ([cellValue isEqual:[self getValue]]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
        #if InAppSettingsUseNewCells
    cell.textLabel.textColor = InAppSettingsBlue;
        #else
    cell.textColor = InAppSettingsBlue;
        #endif
  } else {
    cell.accessoryType = UITableViewCellAccessoryNone;
        #if InAppSettingsUseNewCells
    cell.textLabel.textColor = [UIColor blackColor];
        #else
    cell.textColor = [UIColor blackColor];
        #endif
  }

  return cell;
}

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}

- (NSIndexPath *) tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  id cellValue = [[self.setting valueForKey:InAppSettingsSpecifierValues] objectAtIndex:indexPath.row];

  [self setValue:cellValue];
  [self.tableView reloadData];
  return indexPath;
}

@end

