#!/usr/bin/env python
'''Create, display, and save a new XML document'''
import lxml.etree as ET

# import xml.etree.ElementTree as ET

FILE_NAME = 'knights.xml'
FIELDS = ['title', 'color', 'quest', 'comment']


def main():
    '''Program entry point'''
    knight_info = get_knight_info()
    knight_root = build_tree(knight_info)
    knight_doc = ET.ElementTree(knight_root)
    display_doc(knight_root)
    write_doc(knight_doc)


def get_knight_info():
    '''Read knight data from the file'''
    info = []
    with open('../DATA/knights.txt') as kn:
        for line in kn:
            flds = line.rstrip().split(':')
            info.append(flds)
    return info


def build_tree(knight_recs):
    '''Build the new XML document'''
    tree = ET.Element('knights')
    for knight_rec in knight_recs:
        knight_element = ET.SubElement(tree, 'knight', name=knight_rec[0])
        for tag_name, tag_value in zip(FIELDS, knight_rec[1:]):
            ET.SubElement(knight_element, tag_name).text = tag_value
    return tree


def display_doc(root):
    '''Display XML document with pretty-printing'''
    doc = ET.tostring(root, pretty_print=True, xml_declaration=True)
    print(doc.decode())


def write_doc(doc):
    '''Write the XML document out to a file with pretty-printing'''
    doc.write(FILE_NAME, pretty_print=True, xml_declaration=True)


if __name__ == '__main__':
    main()
