#!/usr/bin/env python

"""gulp2_20bn_json_videos

Gulp a 20bn dataset that is specified using a JSON format and where the input
data are video files.

Usage:
    gulp2_20bn_json_videos [--videos_per_chunk <videos_per_chunk>]
                          [--num_workers <num_workers>]
                          [--frame_size <frame_size>]
                          [--frame_rate <frame_rate>]
                          [--shuffle]
                          [--extend]
                          [--shm_dir <shm_dir>]
                          [--label_name <label_name>]
                          [--remove_duplicates]
                          <input_json> <videos_directory> <output_directory>
    gulp2_20bn_json_videos (-h | --help)
    gulp2_20bn_json_videos --version

Arguments:
    input_json:                             Input JSON file
    videos_directory:                       Base directory for video files
    output_directory:                       Output directory for GulpIO files

Options:
    -h --help                               Show this screen.
    --version                               Show version.
    --videos_per_chunk=<videos_per_chunk>   Number of videos in one chunk [default: 100]
    --num_workers=<num_workers>             Number of parallel processes [default: 4]
    --frame_size=<frame_size>               Size of smaller edge of resized frames [default: -1]
    --frame_rate=<frame_rate>               Frame rate when bursting videos [default: 8]
    --shuffle                               Shuffle the dataset before ingestion
    --extend                                Extend Gulps by further files
    --shm_dir=<shm_dir>                     Temporary directory for bursting frames [default: /dev/shm]
    --label_name=<label_name>               Key of the label in the json meta data [default: template]                           
    --remove_duplicates                     Removes duplicates in json file and entries that are already in GulpDirectory
"""

from docopt import docopt

from gulpio2.adapters import Custom20BNJsonVideoAdapter
from gulpio2.fileio import GulpIngestor

if __name__ == '__main__':
    arguments = docopt(__doc__)
    print(arguments)

    input_json = arguments['<input_json>']
    videos_path = arguments['<videos_directory>']
    output_folder = arguments['<output_directory>']
    videos_per_chunk = int(arguments['--videos_per_chunk'])
    num_workers = int(arguments['--num_workers'])
    frame_size = int(arguments['--frame_size'])
    frame_rate = int(arguments['--frame_rate'])
    shuffle = arguments['--shuffle']
    shm_dir = arguments['--shm_dir']
    label_name = arguments['--label_name']
    remove_duplicates = arguments['--remove_duplicates']

    adapter = Custom20BNJsonVideoAdapter(input_json,
                                         videos_path,
                                         output_folder,
                                         shuffle=shuffle,
                                         frame_size=frame_size,
                                         frame_rate=frame_rate,
                                         shm_dir_path=shm_dir,
                                         label_name=label_name,
                                         remove_duplicate_ids=remove_duplicates,
                                         )
    ingestor = GulpIngestor(adapter,
                            output_folder,
                            videos_per_chunk,
                            num_workers)
    ingestor()
