#!/usr/bin/env python
"""
This script is the standalone/script version of dicom2nifti

@author: abrys
"""
from __future__ import print_function

import argparse
import os

import logging

import dicom2nifti.convert_dir as convert_directory
import dicom2nifti
import sys


def main(args):
    parser = argparse.ArgumentParser(description='dicom2nifti, convert dicom files into nifti format.')
    parser.add_argument('input_directory', type=str,
                        help='directory containing dicom files, can be nested')
    parser.add_argument('output_directory', type=str,
                        help='directory to store the nifti files')

    parser.add_argument('-G', '--allow-gantry-tilting', action='store_true',
                        help='allow the conversion of gantry tilted data (this will be reflected in the affine matrix only)')

    parser.add_argument('-M', '--allow-multiframe-implicit', action='store_true',
                        help='allow the conversion of multiframe data with implicit vr transfer syntax (this is not guaranteed to work)')

    parser.add_argument('-C', '--no-compression', action='store_true',
                        help='disable gzip compression and write .nii files instead of .nii.gz')

    parser.add_argument('-R', '--no-reorientation', action='store_true',
                        help='disable image reorientation (default: images are reoriented to LAS orientation)')

    args = parser.parse_args(args)

    if not os.path.isdir(args.input_directory):
        logging.info('ERROR: \'input_directory\' should be a valid path')
        logging.info('----------------------------------------------------\n')
        parser.print_help()
        return 2
    elif not os.path.isdir(args.output_directory):
        logging.info('ERROR: \'output_directory\' should be a valid path')
        logging.info('----------------------------------------------------\n')
        parser.print_help()
        return 2
    else:
        if args.allow_gantry_tilting:
            dicom2nifti.disable_validate_orthogonal()
        if args.allow_multiframe_implicit:
            dicom2nifti.disable_validate_multiframe_implicit()
        convert_directory.convert_directory(args.input_directory,
                                            args.output_directory,
                                            not args.no_compression,
                                            not args.no_reorientation)


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
