#!/usr/bin/env python
import model,optparse,sys,os,re,shutil

if __name__ == "__main__":
    
    # Command line arguments
    usage = "usage: %prog [options] namelist key1=value1 key2=value2 ..."
    parser = optparse.OptionParser(usage=usage)
    parser.add_option("-f","--file",dest="nml_file",default="./gem_settings.nml",
                      help="Name of FILE containing namelist [default 'gem_settings.nml']",metavar="FILE")
    parser.add_option("-b","--backup",dest="backup",action="store_true",
                      help="Create a backup (.bkp) of the input FILE",metavar="FILE")
    (options,args) = parser.parse_args()

    # Retrieve namelist entries
    cfg = model.Settings(file=options.nml_file)

    # Check for required inputs
    try:
        namelist = args[0]
        setlist = args[1:]
    except IndexError: 
        parser.print_help()
        sys.exit(1)

    # Create backup if requested
    if options.backup:
        bkpfile = options.nml_file+'.bkp'
        try:
            shutil.copy(options.nml_file,bkpfile)
        except IOError:
            sys.stderr.write('Aborting because requested backup cannot be created\n')
            raise

    # Add/modify value for key in settings file
    for entry in setlist:
        try:
            (key,value) = re.split('=',entry)
        except ValueError:
            sys.stderr.write('Key/value pairs must be written as key=value ... skipping '+entry+'\n')
            continue
        cfg.set(key,value,namelist)
    
    # Write modified settings file
    try:
        cfg.write(options.nml_file)
    except IOError:
        sys.stderr.write('Cannot write to '+options.nml_file+'\n')
        raise


        
