#!/usr/bin/env python3

###########################################################################################
#  package:   Gtools
#  file:      pplot
#  brief:     
#  copyright: GPLv3
#             Copyright (C) 2019 EPFL (Ecole Polytechnique Federale de Lausanne)
#             LASTRO - Laboratory of Astrophysics of EPFL
#  author:    Yves Revaz <yves.revaz@epfl.ch>
#
# This file is part of Gtools.
###########################################################################################


from optparse import OptionParser
from h5py import File

def check_files_number(args, nber_file=-1):

    if nber_file < 0 and len(args) < abs(nber_file):
        raise Exception(
            "you must specify at least %i filename" %
            abs(nber_file))

    if nber_file > 0 and len(args) != nber_file:
        raise Exception("you must specify %i filename" % nber_file)


def parse_options_hl(
        usage=None,
        options=None,
        parser=None,
        nber_file=-1,
        default_params=None):
    #################################
    """
    Parse the graph options.
    :ref:`options` list of possible options (postscript, ftype, reduc, cmd, display, info,
    limits, log, units and comoving), by default add all options.
    :params str usage: Usage description (e.g. 'usage: %prog [options] file')
    :params [str] options: List of option to add
    :params OptionParser parser: Predefined parser if some other options are required
    :params int nber_file: Number of file required to run the command (<0 means at least nber_file)
    :params dict default_params: e.g. d['limits'] = {'xmin': 0, 'xmax': 14}}
    """

    if parser is None:
        if usage is None:
            usage = "usage: %prog [options] file"
        parser = OptionParser(usage=usage)

    if options is None:
        options = dir()

        def getName(fname):
            if "add_" in fname and "_options" in fname:
                i = fname[4:-8]
                d = {'test': True,
                     'i': i,
                     'fname': fname}
                return d
            else:
                return {'test': False}

    else:
        def getName(i):
            fname = "add_" + i + "_options"
            d = {'test': True,
                 'i': i,
                 'fname': fname}
            return d

    for j in options:
        d = getName(j)
        if d['test']:
            i = d['i']
            fname = d['fname']

            d = {}
            if default_params is not None and i in default_params:
                d = default_params[i]
            parser = globals()[fname](parser, **d)

    (options, args) = parser.parse_args()

    check_files_number(args, nber_file)

    files = args

    return files, options



def parse_options():

    usage = "usage: %prog [options] file"
    parser = OptionParser(usage=usage)
    
    

    files, options = parse_options_hl(parser=parser, options=[])

    return files, options



########################################################################
# MAIN
########################################################################

units = "Expression for physical CGS units"

if __name__ == '__main__':

    files, opt = parse_options()
    
    filename1 = files[0]
    filename2 = files[1] 
      
    fd1 = File(filename1, "r")
    fd2 = File(filename2, "w")
      
      
    for key in fd1.keys():
      #print(key)

      # create the group
      grp = fd2.create_group(key)

      for attr in list(fd1[key].attrs):
        grp.attrs[attr] = fd1[key].attrs[attr]
        
        
    # close files
    
    fd1.close()
    fd2.close()
            
            
            
          
        
        


