#!/usr/bin/env python

'''
Make thumbnails that conform to AODN viewing standard
C2

Usage:
    thumbnail.py [<image dir> ]
'''
from __future__ import print_function
from multiprocessing.dummy import Pool as ThreadPool
from PIL import Image as im
import numpy as np
import cv2 as cv
import os
import time
import argparse

class Image(object):
    def __init__(self, args):
        self.src_img_dir = os.path.abspath(args.src_img_dir)
        self.dest_img_dir = os.path.abspath(args.dest_img_dir)
        self.file_type = args.file_type
        self.num_threads = args.num_threads
        self.files = os.listdir(self.src_img_dir)
        self.num_src_files = len(self.files)

    def thumbnail(self, name):
        if (name[-3:] == self.file_type):
            image_path = os.path.join(self.src_img_dir, name)
            img = cv.imread(image_path,-1)
            converted_image = cv.resize(img, (453, 341), interpolation=cv.INTER_AREA)
            cv.imwrite(os.path.join(self.dest_img_dir, name[:-4] + ".jpg"), converted_image)
            print(len(os.listdir(self.dest_img_dir)),"/",len(os.listdir(self.src_img_dir)))

    def run(self):
        start = time.time()  
        pool = ThreadPool(self.num_threads)
        pool.map(self.thumbnail, self.files)
        pool.close()
        pool.join()
        end = time.time()
        print("threaded time = ", end=" ")
        print(end-start)
 
if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='Code for generating thumbnails to AODN standard (453x341)')
    parser.add_argument('src_img_dir', help='Path to input image dir. <required>', default='.')
    parser.add_argument('dest_img_dir', nargs='?', help='Path to output image dir. <default thumbnails>', default='thumbnails')
    parser.add_argument('-s', dest='file_type', help='Type of input image. <default png>', default='png')
    parser.add_argument('-t', type=int, dest='num_threads', help='How many threads to use. <default 12>', default=12)
    args = parser.parse_args()
    image = Image(args)
    try:
        os.mkdir(image.dest_img_dir)
    except Exception:
        pass
    image.run()
    exit




