#!/usr/bin/python
import os
import sys
import optparse
from xml.etree import ElementTree

from distutils import dir_util
from preuputils import variables
from preuputils.compose import ComposeXML
from preup import settings, utils

try:
    from xml.etree.ElementTree import ParseError
except ImportError:
    from xml.parsers.expat import ExpatError as ParseError


def main():
    parser = optparse.OptionParser(usage="%prog [options] dirname", description="Create XML files for OpenSCAP")
    parser.add_option('-g', '--group',
                      help='Generate only group.xml file.',
                      action='store_true'
                      )
    opts, args = parser.parse_args()
    if len(args) > 1:
        print 'Specify just one directory with INI file.'
        parser.print_help()
        sys.exit(1)

    if not os.path.exists(args[0]):
        print 'Dir', args[0], 'does not exists.'
        sys.exit(1)

    if args[0].endswith('/'):
        args[0] = args[0][:-1]
    # License text will not be pregenerated
    found = 0
    for d in os.listdir(args[0]):
        if d.endswith(".ini"):
            found = 1
    if not found:
        print 'In directory %s was not found any INI file.' % args[0]
        sys.exit(1)

    dir_name = utils.get_valid_scenario(args[0])
    if dir_name is None:
        print 'Dir does not contain proper scenario.'
        sys.exit(1)
    index = 0
    for i, d in enumerate(args[0].split(os.path.sep)):
        if d == dir_name:
            index = i
            break
    dir_name = '/'.join(args[0].split(os.path.sep)[:index+1])
    result_dirname = dir_name + variables.result_prefix
    dir_util.copy_tree(dir_name, result_dirname)
    dir_name = args[0].replace(dir_name, result_dirname)
    filename = "all-xccdf.xml"
    settings.autocomplete = False
    template_file = ComposeXML.get_template_file()
    target_tree = None
    try:
        file = open(template_file, "r")
        target_tree = ElementTree.fromstring(file.read())
    except IOError, e:
        print 'Problem with reading template.xml file'
        sys.exit(1)
    finally:
        file.close()
    target_tree = ComposeXML.run_compose(target_tree, os.path.dirname(dir_name), content=os.path.basename(dir_name))

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


    #oscap_group.write_profile_xml(target_tree)

if __name__ == "__main__":
    main()
