#!/usr/bin/env python2

import os
import sys
import optparse
import shutil
from distutils import dir_util

from xml.etree import ElementTree
from preup.utils import get_valid_scenario
from preuputils import variables
from preuputils.compose import ComposeXML
try:
    from xml.etree.ElementTree import ParseError
except ImportError:
    from xml.parsers.expat import ExpatError as ParseError


def main():
    parser = optparse.OptionParser(usage="%prog dirname", description="Create XML files for OpenSCAP")
    opts, args = parser.parse_args()
    if len(args) > 1:
        print 'Specify just one directory'
        parser.print_help()
        sys.exit(0)

    dir_name = args[0] + variables.result_prefix
    if args[0].endswith("/"):
        dir_name = args[0][:-1] + variables.result_prefix

    if get_valid_scenario(dir_name) is None:
        print 'Use valid scenario like RHEL6_7 or CENTOS6_RHEL6'
        sys.exit(1)

    if os.path.exists(dir_name):
        shutil.rmtree(dir_name)
    dir_util.copy_tree(args[0], dir_name)
    result_dirname = dir_name
    filename = "all-xccdf.xml"
    template_file = ComposeXML.get_template_file()
    groups = {}
    try:
        file = open(template_file, "r")
    except IOError, e:
        print 'Problem with reading template.xml file'
        sys.exit(1)
    target_tree = ElementTree.fromstring(file.read())
    target_tree = ComposeXML.run_compose(target_tree, dir_name)

    try:
        file = open(os.path.join(result_dirname, filename), "w")
        file.write(ElementTree.tostring(target_tree, "utf-8"))
        print 'Generate report file for preupgrade-assistant is:', ''.join(os.path.join(result_dirname, filename))
    except IOError, e:
        print "Problem with writing file {}".format(filename)

if __name__ == "__main__":
    main()

