#!/usr/bin/python

import traceback
import os, sys, subprocess

sys.path.append('/usr/share/rect-tests/')

import xmls

try:
    if (len(sys.argv) == 1):
        print 'Need options'
        print 'Try %s \'--help\' or \'-h\' for more information' % sys.argv[0]

    elif (len(sys.argv) == 2) or (sys.argv[1] == '--help') or (sys.argv[1] == '-h'):
        print 'Usage: %s <option> -i <list_of_xml>' % sys.argv[0]
        print '<option> must be in (\'join\', \'split\', \'compare\')'

    elif (sys.argv[1] == 'join'):
        if (sys.argv[2] == '--help') or (sys.argv[2] == '-h') or not ('-i' in sys.argv):
            print 'Usage: %s %s -i <list_of_xml> -o <result_xml>(default: testResult.xml)' % (sys.argv[0], sys.argv[1])
            print '\t<list_of_xml> is a list of xml-files,'
            print '\twhich must be converted in one xml-file'

        elif (len(sys.argv) > 3) and (sys.argv[2] == "-i"):
            tests = []
            if ("-o" not in sys.argv):
                for i in range(sys.argv.index("-i") +1 , len(sys.argv)):
                    if (os.path.isdir(sys.argv[i])):
                        import glob

                        for f in glob.glob(os.path.join(sys.argv[i],"*.xml")):
                            file_name, ext = os.path.splitext(os.path.split(f)[1])
                            if ext == '.xml':
                                tests.append(f)
                    else:
                        file_name, ext = os.path.splitext(os.path.split(sys.argv[i])[1])
                        if ext == '.xml':
                            tests.append(sys.argv[i])
                filename = "testsResult.xml"
            else:
                count = sys.argv.index("-o")

                for i in range(sys.argv.index("-i") +1, count):
                    if (os.path.isdir(sys.argv[i])):
                        import glob

                        for f in glob.glob(os.path.join(sys.argv[i],"*.xml")):
                            file_name, ext = os.path.splitext(os.path.split(f)[1])
                            if ext == '.xml':
                                tests.append(f)
                    else:
                        file_name, ext = os.path.splitext(os.path.split(sys.argv[i])[1])
                        if ext == '.xml':
                            tests.append(sys.argv[i])

                filename = sys.argv[count+1]

            o_JoinXml = xmls.CJoinxml()
            resultfile = o_JoinXml.WriteInfoInJoinXML (capture_result = tests, capture_filename = filename)
            print ""
            print 'The result file after join is %s' % resultfile
            print ""

    elif (sys.argv[1] == 'split'):
        if (sys.argv[2] == '--help') or (sys.argv[2] == '-h') or not ('-i' in sys.argv):
            print 'Usage: %s %s -i <list_of_xml>' % (sys.argv[0], sys.argv[1])
            print '\t<list_of_xml> is a list of xml-files with results,'
            print '\twhich must be splitted in xml-files with description of one test'

        elif (len(sys.argv) > 3) and (sys.argv[2] == "-i"):
            tests = []
            for i in range(sys.argv.index("-i") +1, len(sys.argv)):
                if (os.path.isdir(sys.argv[i])):
                    import glob

                    for f in glob.glob(os.path.join(sys.argv[i],"*.xml")):
                        file_name, ext = os.path.splitext(os.path.split(f)[1])
                        if ext == '.xml':
                            tests.append(f)
                else:
                    file_name, ext = os.path.splitext(os.path.split(sys.argv[i])[1])
                    if ext == '.xml':
                        tests.append(sys.argv[i])

            o_SplitXml = xmls.CSplitxml()
            _, split_result = o_SplitXml.WriteInfoInSplitXML (capture_result = tests)
            print ""
            print "Directory with files after splitting: %s" % split_result
            print ""
    elif (sys.argv[1] == 'compare'):
        if (sys.argv[2] == '--help') or (sys.argv[2] == '-h') or not ('-i' in sys.argv):
            print 'Usage: %s %s -m <mode> -i <list_of_xml>' % (sys.argv[0], sys.argv[1])
            print '\t<list_of_xml> is a list of xml-files with results,'
            print '\t<mode> must be in (\'html\', \'txt(to do)\', \'wiki(to do)\')'

        elif (len(sys.argv) > 3) and (((sys.argv[2] == "-m") and (sys.argv[4] == "-i")) or (sys.argv[2] == "-i")):
            tests = []
            if ("-o" not in sys.argv):
                for i in range(sys.argv.index("-i") +1, len(sys.argv)):
                    if (os.path.isdir(sys.argv[i])):
                        import glob

                        for f in glob.glob(os.path.join(sys.argv[i],"*.xml")):
                            file_name, ext = os.path.splitext(os.path.split(f)[1])
                            if ext == '.xml':
                                tests.append(f)
                    else:
                        file_name, ext = os.path.splitext(os.path.split(sys.argv[i])[1])
                        if ext == '.xml':
                            tests.append(sys.argv[i])
                filename = ""
            else:
                count = sys.argv.index("-o")
                for i in range(sys.argv.index("-i") +1, count):
                    if (os.path.isdir(sys.argv[i])):
                        import glob

                        for f in glob.glob(os.path.join(sys.argv[i],"*.xml")):
                            file_name, ext = os.path.splitext(os.path.split(f)[1])
                            if ext == '.xml':
                                tests.append(f)
                    else:
                        file_name, ext = os.path.splitext(os.path.split(sys.argv[i])[1])
                        if ext == '.xml':
                            tests.append(sys.argv[i])

                filename = sys.argv[count+1]

            if ('-m' not in sys.argv):
                mode = 'html'
            else:
                mode = sys.argv[sys.argv.index("-m") + 1]
            o_CompareXml = xmls.CComparexml()
            common_result, xml_result = o_CompareXml.TransformXML (capture_result = tests, capture_filename = filename, capture_mode = mode)
            print ""
            print "Common result: %s" % common_result
            print "Result in xml: %s" % xml_result
            print ""


except:
    print '\nError in xml-run'
    traceback.print_exc()

