#!/usr/bin/env python
"""
Edits DICOM tag values.
"""
import sys
import os
import re
import argparse
from collections import defaultdict
from qiutil import command
from qiutil.logging import logger
from qidicom import meta

def main(argv=sys.argv):
    # Parse the command line arguments.
    edits, files, opts = _parse_arguments()
    # Break out the logging options.
    log_opts = {k: opts.pop(k) for k in opts.keys() if k.startswith('log')}
    # Configure the logger.
    command.configure_log('eddicom', log_opts)
    # Edit the tag values.
    meta.edit(*files, **edits)

    return 0


def _parse_arguments():
    """Parses the command line arguments."""
    parser = argparse.ArgumentParser()

    # The log options.
    command.add_options(parser)

    # The tag edit argument.
    parser.add_argument('edits', help='the comma-delimited tag name=value settings')

    # The input file argument.
    parser.add_argument('files', help='the DICOM file(s) to change', metavar='DICOM',
                        nargs='+')

    args = vars(parser.parse_args())
    nonempty_args = dict((k, v) for k, v in args.iteritems() if v != None)

    # Convert the edits argument to a {tag:value} dictionary.
    edits_arg = nonempty_args.pop('edits').strip('"\'')
    pairs = [s.split('=') for s in re.split(', *', edits_arg)]
    edits = {k.replace(' ', ''): v for k, v in pairs}
    
    return edits, nonempty_args.pop('files'), nonempty_args


if __name__ == '__main__':
    sys.exit(main())
