#! /usr/bin/env python
##########################################################################
# NSAp - Copyright (C) CEA, 2013 - 2016
# Distributed under the terms of the CeCILL-B license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
# for details.
##########################################################################

# System import
from __future__ import print_function
import argparse
import os
import shutil
import textwrap
from argparse import RawTextHelpFormatter

# Bredala import
try:
    import bredala
    bredala.USE_PROFILER = False
    bredala.register("pydcmio.dcmconverter.spliter",
                     names=["split_series"])
except:
    pass

# Dcmio import
from pydcmio import __version__ as version
from pydcmio.dcmconverter.spliter import split_series

# Parameters to keep trace
__hopla__ = ["tool", "version", "inputs", "outputs"]


# Script documentation
DOC = """
Split DICOM series
~~~~~~~~~~~~~~~~~~

Split a Dicom folder files by series.
Dicom files are searched recursively in the input folder and all files
are expected to be Dicom files.

Expect to split files from a single session.

Command:

python $HOME/git/pydcmio/pydcmio/scripts/pydcmio_splitseries \
    -v 2 \
    -i /volatile/nsap/dcm2nii/dicom \
    -o /volatile/nsap/dcm2nii/convert_dicom 
"""


def is_directory(dirarg):
    """ Type for argparse - checks that directory exists.
    """
    if not os.path.isdir(dirarg):
        raise argparse.ArgumentError(
            "The directory '{0}' does not exist!".format(dirarg))
    return dirarg


parser = argparse.ArgumentParser(
    description=textwrap.dedent(DOC),
    formatter_class=RawTextHelpFormatter)
required = parser.add_argument_group("required arguments")
required.add_argument(
    "-i", "--indir", dest="indir", required=True, metavar="PATH",
    help="a folder that contains DICOM files only.",
    type=is_directory)
required.add_argument(
    "-o", "--outdir", dest="outdir", required=True, metavar="PATH",
    help="the folder that contains the generated split DICOM files.",
    type=is_directory)
parser.add_argument(
    "-v", "--verbose", dest="verbose", type=int, choices=[0, 1, 2], default=0,
    help="increase the verbosity level: 0 silent, [1, 2] verbose.")
parser.add_argument(
    "-s", "--skip-non-dicoms", action="store_true",
    help="If set, skip non DICOM files in the input directory.")
args = parser.parse_args()


"""
Welcome message.
"""
tool = "pydcmio_splitseries"
if args.verbose > 0:
    print("[info] Start DICOM files splitting...")
    print("[info] Input: {0}.".format(args.indir))
    print("[info] Output: {0}.".format(args.outdir))
inputs = [args.indir]
outputs = [args.outdir]


"""
Execute the splitting task.
"""
split_series(
    dicom_dir=args.indir,
    outdir=args.outdir,
    skip_non_dicom_files=args.skip_non_dicoms,
    check_session=True,
    check_encoding=True)

