#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# */AIPND-revision/intropyproject-classify-pet-images/get_pet_labels.py
#                                                                             
# PROGRAMMER: Lorenzo Varano
# DATE CREATED: 2020.02.17                              
# REVISED DATE: 
# PURPOSE: Create the function get_pet_labels that creates the pet labels from 
#          the image's filename. This function inputs: 
#           - The Image Folder as image_dir within get_pet_labels function and 
#             as in_arg.dir for the function call within the main function. 
#          This function creates and returns the results dictionary as results_dic
#          within get_pet_labels function and as results within main. 
#          The results_dic dictionary has a 'key' that's the image filename and
#          a 'value' that's a list. This list will contain the following item
#          at index 0 : pet image label (string).
#
##
# Imports python modules
from os import listdir
from os.path import splitext

# TODO 2: Define get_pet_labels function below please be certain to replace None
#       in the return statement with results_dic dictionary that you create 
#       with this function
# 
def get_pet_labels(image_dir):
    """
    Creates a dictionary of pet labels (results_dic) based upon the filenames 
    of the image files. These pet image labels are used to check the accuracy 
    of the labels that are returned by the classifier function, since the 
    filenames of the images contain the true identity of the pet in the image.
    Be sure to format the pet labels so that they are in all lower case letters
    and with leading and trailing whitespace characters stripped from them.
    (ex. filename = 'Boston_terrier_02259.jpg' Pet label = 'boston terrier')
    Parameters:
     image_dir - The (full) path to the folder of images that are to be
                 classified by the classifier function (string)
    Returns:
      results_dic - Dictionary with 'key' as image filename and 'value' as a 
      List. The list contains for following item:
         index 0 = pet image label (string)
    """
    # Replace None with the results_dic dictionary that you created with this
    # function
    # Retrieve all images
    filename_list = listdir(image_dir)
       
    # Create an empty result dictionary
    results_dic = dict()
    
    # Format keys and values as requested and add to results list
    for dogimg in filename_list:
       # Skips file if starts with .
       if dogimg[0] != ".":
           # Removing the file extension and underscores - method taken from https://kite.com/python/examples/4300/os-remove-the-file-extension-from-a-filename
           doglabel = splitext(dogimg)[0].lower().replace("_", " ")
           # Removing all digits from the string
           doglabel = "".join([i for i in doglabel if not i.isdigit()]).strip()
           # Checking if pet label already is in dictionary
           if dogimg not in results_dic:
               results_dic[dogimg] = [doglabel]
           else:
               print("** Warning: Key=", dogimg, "already exists in results_dic with value =", doglabel)
            
    # Determines number of items in dictionary
    items_in_dic = len(results_dic)
    print("\nEmpty Dictionary results_dic - n items=", items_in_dic)
    
    #Iterating through a dictionary printing all keys & their associated values
    print("\nPrinting all key-value pairs in dictionary results_dic:")
    for key in list(results_dic)[:10]:
        print("Filename=", key, "   Pet Label=", results_dic[key][0])
        
    # Return the dictionary results_dic    
    return results_dic