//
//  Retrieving_Properties_of_Address_Book_EntriesAppDelegate.m
//  Retrieving Properties of Address Book Entries
//
//  Created by Vandad Nahavandipoor on 21/07/2011.
//  Copyright 2011 Pixolity Ltd. All rights reserved.
//

#import "Retrieving_Properties_of_Address_Book_EntriesAppDelegate.h"

@implementation Retrieving_Properties_of_Address_Book_EntriesAppDelegate

@synthesize window = _window;

/* 1 */
- (BOOL)            application:(UIApplication *)application
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
  
  ABAddressBookRef addressBook = ABAddressBookCreate();
  
  if (addressBook != nil){
    NSLog(@"Udało się uzyskać dostęp do książki adresowej.");
    
    NSArray *allPeople = (__bridge_transfer NSArray *)
                          ABAddressBookCopyArrayOfAllPeople(addressBook);
    
    NSUInteger peopleCounter = 0;
    for (peopleCounter = 0;
         peopleCounter < [allPeople count];
         peopleCounter++){
      
      ABRecordRef thisPerson =  (__bridge ABRecordRef)
                                [allPeople objectAtIndex:peopleCounter];
      
      NSString *firstName = (__bridge_transfer NSString *)
        ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty);
      
      NSString *lastName = (__bridge_transfer NSString *)
        ABRecordCopyValue(thisPerson, kABPersonLastNameProperty);
      
      NSString *email = (__bridge_transfer NSString *)
        ABRecordCopyValue(thisPerson, kABPersonEmailProperty);
      
      NSLog(@"Imię = %@", firstName);
      NSLog(@"Nazwisko = %@", lastName);
      NSLog(@"Adres = %@", email);
      
    }
    
    CFRelease(addressBook);
    
  }
  
  self.window = [[UIWindow alloc] initWithFrame:
                 [[UIScreen mainScreen] bounds]];
  
  self.window.backgroundColor = [UIColor whiteColor];
  [self.window makeKeyAndVisible];
  return YES;
}

/* 2 */
//- (void) logPersonEmails:(ABRecordRef)paramPerson{
//  
//  if (paramPerson == NULL){
//    NSLog(@"Rekord wskazanego kontaktu ma wartość NULL.");
//    return;
//  }
//  
//  ABMultiValueRef emails = 
//    ABRecordCopyValue(paramPerson, kABPersonEmailProperty);
//  
//  if (emails == NULL){
//    NSLog(@"Kontakt nie posiada żadnych adresów e-mail.");
//    return;
//  }
//  
//  /* Iteracja przez wszystkie adresy e-mail. */
//  NSUInteger emailCounter = 0; 
//  
//  for (emailCounter = 0;
//       emailCounter < ABMultiValueGetCount(emails); 
//       emailCounter++){
//    
//    /* Pobranie etykiety dla adresu e-mail (o ile taka istnieje). */ 
//    NSString *emailLabel = (__bridge_transfer NSString *)
//                            ABMultiValueCopyLabelAtIndex(emails, emailCounter);
//    
//    NSString *localizedEmailLabel = (__bridge_transfer NSString *)
//      ABAddressBookCopyLocalizedLabel((__bridge CFStringRef)emailLabel);
//    
//    /* Pobranie samego adresu e-mail. */ 
//    NSString *email = (__bridge_transfer NSString *)
//                      ABMultiValueCopyValueAtIndex(emails, emailCounter);
//    
//    NSLog(@"Etykieta = %@, Zlokalizowana etykieta = %@, Adres e-mail = %@", 
//          emailLabel, 
//          localizedEmailLabel, 
//          email);
//    
//  }
//  
//  CFRelease(emails);
//  
//}
//
//- (BOOL)            application:(UIApplication *)application
//  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//  
//  ABAddressBookRef addressBook = ABAddressBookCreate();
//  
//  if (addressBook != nil){
//    NSLog(@"Udało się uzyskać dostęp do książki adresowej.");
//    
//    NSArray *allPeople = (__bridge_transfer NSArray *)
//      ABAddressBookCopyArrayOfAllPeople(addressBook);
//    
//    NSUInteger peopleCounter = 0;
//    for (peopleCounter = 0;
//         peopleCounter < [allPeople count];
//         peopleCounter++){
//      
//      ABRecordRef thisPerson = 
//      (__bridge ABRecordRef)[allPeople objectAtIndex:peopleCounter];
//      
//      NSString *firstName = (__bridge_transfer NSString *)
//      ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty);
//      
//      NSString *lastName = (__bridge_transfer NSString *)
//      ABRecordCopyValue(thisPerson, kABPersonLastNameProperty);
//      
//      NSLog(@"Imię = %@", firstName);
//      NSLog(@"Nazwisko = %@", lastName);
//      
//      [self logPersonEmails:thisPerson];
//      
//    }
//    
//    CFRelease(addressBook);
//    
//  }
//  
//  self.window = [[UIWindow alloc] initWithFrame:
//                 [[UIScreen mainScreen] bounds]];
//  
//  self.window.backgroundColor = [UIColor whiteColor];
//  [self.window makeKeyAndVisible];
//  return YES;
//}

- (void)applicationWillResignActive:(UIApplication *)application
{
  /*
   Ta metoda jest wywoływana, gdy aplikacja przechodzi ze stanu aktywnego do nieaktywnego. Może być wywołana w określonych sytuacjach (na przykład w chwili odbywania rozmowy telefonicznej lub po otrzymaniu wiadomości SMS) bądź kiedy użytkownik kończy działanie aplikacji. Metoda rozpoczyna proces przejścia do stanu pozostania w tle. Tę metodę można wykorzystać do wstrzymania wykonywania bieżących zadań, wyłączenia liczników czasu, zmniejszenia liczby klatek generowanych przez OpenGL ES. W grach ta metoda powinna być użyta do wstrzymania gry (pauza).
   */
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  /*
   Tę metodę należy wykorzystać do zwolnienia zasobów współdzielonych, zapisania danych użytkownika, wyzerowania liczników czasu oraz do przechowania takiej ilości informacji o stanie, która pozwoli na przywrócenie aplikacji do stanu bieżącego. Jeżeli aplikacja obsługuje działanie w tle, w chwili kończenia działania należy wywołać tę metodę zamiast applicationWillTerminate:.
   */
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
  /*
   Ta metoda jest wywoływana podczas przechodzenia aplikacji ze stanu aktywnego do działania w tle. Można więc tutaj wycofać wiele zmian wprowadzonych w chwili przechodzenia do stanu działania w tle.
   */
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  /*
   W tej metodzie można wznowić działanie zadań zatrzymanych (lub nieuruchomionych), gdy aplikacja była nieaktywna. Jeżeli aplikacja znajdowała się w trybie działania w tle, w metodzie można przeprowadzić odświeżenie interfejsu użytkownika.
   */
}

- (void)applicationWillTerminate:(UIApplication *)application
{
  /*
   Ta metoda jest wywoływana, gdy działanie aplikacji ma zostać zakończone. Zapoznaj się z opisem metody applicationDidEnterBackground:.
   */
}

@end
