#!/usr/bin/env python

import argparse
import os
import sys

from smrf.utils import io


def main():

    """
    Meant to update the config files using make
    """

    parser = argparse.ArgumentParser(description='use the configuration file checker to update config files in a directory')

    parser.add_argument('dir', metavar='F', type=str,
                        help='Path to a directory containing SMRF ini files')
    parser.add_argument('-c', action="store_true",
                        help='Print out errors and warnins on each file')
    parser.add_argument('-d', action="store_true",
                        help='Does a dry run and doesnt update any files')
    args = parser.parse_args()

    files_updated=0
    files_with_errors=0
    fails=0
    files_checked=0

    if os.path.isdir(args.dir):
        for f in os.listdir(args.dir):
            if f.split('.')[-1] =='ini':
                files_checked+=1
                out_f = os.path.abspath(os.path.join(args.dir,f))
                user_cfg = io.get_user_config(out_f)
                config = io.get_master_config()
                print(f)
                warnings, errors = io.check_config_file(user_cfg,config,user_cfg_path=os.path.abspath(os.path.join(args.dir,f)))
                print "Checking {0}".format(f)
                if args.c:
                    io.print_config_report(warnings,errors)

                if len(errors) > 0:
                    files_with_errors +=1
                else:
                    try:
                        if not args.d:
                            io.generate_config(user_cfg,out_f)
                            files_updated +=1
                    except:
                        fails +=1

    else:
        raise IOError('Directory does not exist.')
    print "\nConfig updater complete!"
    fmt = '{: <20} {: <30}'
    print "==========================="
    print fmt.format("Files Checked:",files_checked)
    print fmt.format("Files Updated:",files_updated)
    print fmt.format("Failed to Update:",fails)
    print fmt.format("Files with Errors:",files_with_errors)
if __name__ == '__main__':
    main()
