#!python
# -*- coding: utf-8 -*-
# **************************************************
__author__  = "Teddy Chantrait"
__email__   = "teddy.chantrait@gmail.com"
__status__  = "Development"
__date__    = "2024-09-29 14:08:25.029326"
__version__ = 1.0
# **************************************************


# ////////////////////////////////////////////////////////////////////////////////////////////////////
#                                     BEGINING OF THE CODE
# ////////////////////////////////////////////////////////////////////////////////////////////////////
import os
import shutil
import argparse
from nonRegressionTestTools import genericTestBase as GTB
from nonRegressionTestTools import filters
from nonRegressionTestTools import config as CONF
all_av_filter = list(filters.iTestFilter.implemented_filters.keys())
all_av_filter.remove("Regex")
all_av_filter.sort()

descr = """ Replace the reference state(s) of a test/tests by its associated last run state.
  In detail it copy the file foo.res to foo.state"""

parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
                                 description=descr)


parser.add_argument("-v", "--verb",
                    help="verbosity level default({})\n\
                    see NRT_VERBOSITY_LEVEL".format(CONF.conf.NRT_VERBOSITY_LEVEL),
                    dest="verb",
                    default=CONF.conf.NRT_VERBOSITY_LEVEL,
                    type=int, choices=range(0, 4)
                    )

parser.add_argument("-l", "--local",
                    help="run localy (do walk into into child directories)",
                    action="store_true",
                    dest="local",
                    default=False
                    )

group = parser.add_mutually_exclusive_group()

group.add_argument("-f",
                   "--flag",
                   help="select only case(s) whose flags matching one of the following; {}".format("\n".join(all_av_filter)),
                   dest="filter_name",
                   type=str,
                   choices=all_av_filter.append(""),
                   default="",
                   )

group.add_argument("-r", "--regex",
                   help="apply regex filter on directory (only)",
                   dest="regex",
                   default="",
                   type=str
                   )


args = parser.parse_args()

def run_me(args):
    if args.regex:
        args.filter_name = "Regex"

    test_cases = GTB.test_cases(recursive=not(args.local),
                                filter_name=args.filter_name,
                                regex=args.regex,
                                ext=CONF.conf.NRT_RECIPE_EXT,
                                verbosity_level=args.verb,
                                )

    for icase in test_cases.testCases:
        fn_state = icase.struct.state
        fn_res = icase.struct.res
        if not os.path.exists(fn_res):
            pass
        else:
            print("copy {} -> {}".format(fn_res.replace(icase.struct.directory, "."), fn_state.replace(icase.struct.directory, ".")))
            shutil.copyfile(fn_res, fn_state)


run_me(args)
